我正在尝试使用像这样的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有多个空格,并且无法正常工作。
提前致谢!
答案 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个或更多个空格字符(因为保留字和=
之间可以有空格)=
- 等号)
- 前瞻的结束。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));