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

Mer*_*rcy 5 c# regex split

我正在尝试使用这样的Regex.Split字符串进行拆分:

string criteria = "NAME='Eduard O' Brian'   COURSE='Math II' TEACHER = 'Chris Young' SCHEDULE='3' CAMPUS='C-1' ";
Run Code Online (Sandbox Code Playgroud)

我们有以下“保留词”:NAME, COURSE, TEACHER, SCHEDULE, CAMPUS.需要将原始字符串拆分为:

NAME='Eduard O' Brian'
COURSE='Math II'
TEACHER = 'Chris Young'
SCHEDULE='3'
CAMPUS='C-1'
Run Code Online (Sandbox Code Playgroud)

标准Split是:有一个简单的引号,后跟一个或多个空格,后跟一个“保留词”。

我得到的最接近的表达是:

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

这是完整的源代码:

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的代码是这样做的:

NAME='Eduard O' Brian'   COURSE='Math II
T
EACHER = 'Chris Young
S
CHEDULE='3
C
AMPUS='C-1
Run Code Online (Sandbox Code Playgroud)

它正在删除最后一个简单的引用并且只取保留字的第一个字母。并且此示例中的 COURSE 有多个空格并且不适合它。

提前致谢!

Wik*_*żew 3

您可以简单地用 1+ 个空格进行分割,后面跟上您的保留字,然后是=

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

请参阅正则表达式演示

图案细节

  • \s+- 1 个或多个空白字符
  • (?=- 正向前瞻的开始,紧邻当前位置的右侧,需要以下文本:
    • (?:NAME|COURSE|TEACHER|SCHEDULE|CAMPUS)- 任何替代文字文本
    • \s* - 0 个或多个空白字符(因为保留字 和 之间可以有空格=
    • =- 等号
  • )- 前瞻结束。

C# 演示

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));
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述