2015-01-17 20 views
1

我在Linqpad中用正则表达式提取字符串。我有一些怀疑,我分享。任何人都可以请你澄清一下这件事。 -C#正则表达式匹配VS对同一个字符串的拆分

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

我们来分析一下你的字符串:

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

Regex.Split包括捕获组到结果数组。

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

abc|xyz 
\  \ 

所以这是一个空字符串之前的比赛,并赛后一个空字符串。在中间的两个项目被插入,因为前述的分裂行为:

如果捕获括号在一个Regex.Split表达所使用的,任何捕获文本被包括在生成的字符串数组英寸例如,如果将字符串“plum-pear”拆分为捕获括号内的连字符,则返回的数组将包含一个包含连字符的字符串元素。

+0

是否可以按组分组? –

+1

为什么不简单地在'|'char上分割,而根本不使用正则表达式呢? –

+0

我已经做到了。只是想问一下这个可能性。 –