C#RegEx.Split分隔符后跟特定的单词

时间:2018-04-17 21:44:38

标签: c# regex split

我正在尝试使用像这样的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 个答案:

答案 0 :(得分:1)

你可以简单地用1+个空格分开,后跟你的保留字,然后是=

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

请参阅regex demo

模式详情

  • \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));

enter image description here