我正在尝试使用这样的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 有多个空格并且不适合它。
提前致谢!
您可以简单地用 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 个或多个空白字符(因为保留字 和 之间可以有空格=)=- 等号)- 前瞻结束。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)
| 归档时间: |
|
| 查看次数: |
712 次 |
| 最近记录: |