【发布时间】:2018-04-17 21:44:37
【问题描述】:
我正在尝试使用 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 有多个空格,并且不适用于它。
提前致谢!
【问题讨论】:
-
你的代码现在做什么?不工作怎么办?
-
您放在方括号
[ ]内的任何内容都将匹配其中的任何单个字符。[NAME]将匹配“N”、“A”、“M”和“E” -
你的
criteria格式不一致;您需要将 O'Brian 等 NAME 中的撇号与用于分隔字段的撇号区分开来。 -
谢谢大家。 @DourHighArch 因为这是一个遗留应用程序,所以我无法更改使用撇号作为分隔符。这是因为我打算用下一个“保留词”作为区分句子的方式
-
首先,将
[NAME]|[COURSE]|[TEACHER]|[SCHEDULE]|[CAMPUS]更改为NAME|COURSE|TEACHER|SCHEDULE|CAMPUS。正如@MattiPrice 指出的那样,您现在拥有的是character class,它匹配[ ]中的任何字符