2015-01-17 18 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

我已經做到了。只是想問一下這個可能性。 –