C#RegEx.分隔符,后跟特定单词
我正在尝试使用C#RegEx.分隔符,后跟特定单词,c#,regex,split,C#,Regex,Split,我正在尝试使用Regex.split字符串进行拆分,如下所示: string criteria = "NAME='Eduard O' Brian' COURSE='Math II' TEACHER = 'Chris Young' SCHEDULE='3' CAMPUS='C-1' "; 我们有以下“保留字”:姓名、课程、教师、时间表、校园。需要将原始字符串拆分为: NAME='Eduard O' Brian' COURSE='Math II' TEACHER = 'Chris Young'
Regex.split
字符串进行拆分,如下所示:
string criteria = "NAME='Eduard O' Brian' COURSE='Math II' TEACHER = 'Chris Young' SCHEDULE='3' CAMPUS='C-1' ";
我们有以下“保留字”:姓名、课程、教师、时间表、校园。
需要将原始字符串拆分为:
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
它删除了最后一个简单的引号,只取保留字的第一个字母。本示例中的课程有多个空间,不适用于它
提前谢谢 您可以简单地拆分为1+个空格,后跟保留字,后跟
=
:
var results = Regex.Split(s, @"\s+(?=(?:NAME|COURSE|TEACHER|SCHEDULE|CAMPUS)\s*=)");
见
图案细节
-1个或多个空白字符\s+
-立即在当前位置右侧开始正向前瞻,需要以下文本:(?=
-任何替代文字文本(?:姓名|课程|教师|课程表|校园)
-0个或多个空格字符(因为保留字和\s*
之间可能有空格)=
-等号=
-前瞻的结束)
您的代码现在做什么?如果它不起作用呢?放在方括号内的任何东西都将匹配其中的任何单个字符
[NAME]
将与“N”、“A”、“M”和“E”匹配您的标准
格式不一致;您需要区分像O'Brian这样的名字中的撇号和用于分隔字段的撇号。谢谢大家@DourHighArch由于这是一个遗留应用程序,我无法更改撇号作为分隔符的用法。这是因为我计划使用下一个“保留字”作为区分句子的方式。首先,将[NAME]|[COURSE]|[TEACHER]|[SCHEDULE]|[CAMPUS]
更改为NAME | COURSE | TEACHER | SCHEDULE | CAMPUS
。正如@MattiPrice所指出的,您现在拥有的是a,它匹配了[]
测试中的任何字符,并且得到了与您、课程和老师在同一行相同的结果@BasicIsaac在=
之前有空格,在那里添加\s*
。删除TEACHER和=之间的空格可以修复它,但我不知道这是否是@Mercy@BasicIsaac不删除,添加一个模式以匹配保留字和=
之间的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));