C#正则表达式匹配与同一字符串的拆分

C#正则表达式匹配与同一字符串的拆分,c#,regex,c#-4.0,C#,Regex,C# 4.0,我在Linqpad玩一个正则表达式来提取字符串。我也有一些疑问。谁能解释一下这件事吗 string s = "abc|xyz"; Regex.Match(s, @"(\w*)[|]{1}(\w*)").Dump(); Regex.Split(s, @"(\w*)[|]{1}(\w*)").Dump(); 使用Regex.Match我可以很容易地提取出两个组 但是我不明白为什么在Regex.Split中有两个空条目 让我们分析您的字符串: abc|xyz \_____/ <-- the

我在Linqpad玩一个正则表达式来提取字符串。我也有一些疑问。谁能解释一下这件事吗

string s = "abc|xyz";
Regex.Match(s, @"(\w*)[|]{1}(\w*)").Dump();
Regex.Split(s, @"(\w*)[|]{1}(\w*)").Dump();
使用
Regex.Match
我可以很容易地提取出两个组

但是我不明白为什么在
Regex.Split
中有两个空条目


让我们分析您的字符串:

abc|xyz
\_____/  <-- the match
\_/      <-- capture group 1
    \_/  <-- capture group 2
因此,比赛前有一个空字符串,比赛后有一个空字符串。由于前面提到的分裂行为,插入中间的两个项:

如果在
Regex.Split
表达式中使用捕获括号,则所有捕获的文本都将包含在结果字符串数组中。例如,如果在捕获括号内的连字符上拆分字符串“梅花梨”,则返回的数组包含一个包含连字符的字符串元素


可以按组拆分吗?为什么不直接在
|
字符上拆分,而不使用正则表达式呢?您需要根据需要调整整个模式,或者可以循环匹配项和组,并在循环中构建字符串列表(基本上,根据需要的差异重新实现
split
)<代码>拆分只是一个方便的功能,很容易自己实现。
abc|xyz
\      \