簡體   English   中英

C#RegEx.Split分隔符后跟特定的單詞

[英]C# RegEx.Split delimiter followed by specific words

我試圖使用像這樣的Regex.Split字符串進行拆分:

string criteria = "NAME='Eduard O' Brian'   COURSE='Math II' TEACHER = 'Chris Young' SCHEDULE='3' CAMPUS='C-1' ";

我們有以下'保留字': NAME, COURSE, TEACHER, SCHEDULE, CAMPUS. 需要將原始字符串拆分為:

NAME='Eduard O' Brian'
COURSE='Math II'
TEACHER = 'Chris Young'
SCHEDULE='3'
CAMPUS='C-1'

Split的標准是:使用簡單引號,后跟一個或多個空格,后跟“保留字”。

我達到的最接近的表達是:

var match = Regex.Split(criteria, @"'[\s+]([NAME]|[COURSE]|[TEACHER]|[SCHEDULE]|[CAMPUS])", RegexOptions.CultureInvariant);

這是完整的源代碼:

using System;
using System.Text.RegularExpressions;
namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string criteria = "NAME='Eduard O' Brian'  COURSE='Math II' TEACHER = 'Chris Young' SCHEDULE='3' CAMPUS='C-1' ";

            var match = Regex.Split(criteria, @"'[\s+]([NAME]|[COURSE]|[TEACHER]|[SCHEDULE]|[CAMPUS])", RegexOptions.CultureInvariant);

            foreach (var item in match)
                Console.WriteLine(item.ToString());

            Console.Read();
        }
    }
}

我的代碼是這樣做的:

NAME='Eduard O' Brian'   COURSE='Math II
T
EACHER = 'Chris Young
S
CHEDULE='3
C
AMPUS='C-1

它正在刪除最后一個簡單的引用,只取保留字的第一個字母。 此示例中的COURSE有多個空格,並且無法正常工作。

提前致謝!

你可以簡單地用1+個空格分開,然后用你的保留字跟着=

var results = Regex.Split(s, @"\s+(?=(?:NAME|COURSE|TEACHER|SCHEDULE|CAMPUS)\s*=)");

請參閱正則表達式演示

圖案細節

  • \\s+ - 一個或多個空白字符
  • (?= - 在當前位置的右側立即開始一個正向前瞻,需要以下文字:
    • (?:NAME|COURSE|TEACHER|SCHEDULE|CAMPUS) - 任何替代文字文本
    • \\s* - 0個或更多個空格字符(因為保留字和=之間可以有空格)
    • = - 一個等號
  • ) - 前瞻的結束。

C#demo

var criteria = "NAME='Eduard O' Brian'  COURSE='Math II' TEACHER = 'Chris Young' SCHEDULE='3' CAMPUS='C-1' ";
var match = Regex.Split(criteria, @"\s+(?=(?:NAME|COURSE|TEACHER|SCHEDULE|CAMPUS)\s*=)");
Console.WriteLine(string.Join("\n", match));

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM