C#Regex Match Vs Split为相同的字符串

时间:2015-01-17 12:25:03

标签: 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.Match

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

Regex.Split

1 个答案:

答案 0 :(得分:2)

让我们分析你的字符串:

abc|xyz
\_____/  <-- the match
\_/      <-- capture group 1
    \_/  <-- capture group 2

Regex.Split将捕获的组包含在结果数组中。

分裂发生在整场比赛中,就在那里:

abc|xyz
\      \

所以在匹配之前有一个空字符串,在匹配之后有一个空字符串。由于上述分裂行为,插入了中间的两个项目:

  

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