我正在Linqpad玩一个正则表达式来提取字符串。我有一些疑问,我正在分享。任何人都可以对这件事情说清楚。 -
string s = "abc|xyz";
Regex.Match(s, @"(\w*)[|]{1}(\w*)").Dump();
Regex.Split(s, @"(\w*)[|]{1}(\w*)").Dump();
使用Regex.Match
我可以回复两组我可以轻松提取的组。
。
但我不明白为什么在Regex.Split
中有两个空条目。
答案 0 :(得分:2)
让我们分析你的字符串:
abc|xyz
\_____/ <-- the match
\_/ <-- capture group 1
\_/ <-- capture group 2
Regex.Split
将捕获的组包含在结果数组中。
分裂发生在整场比赛中,就在那里:
abc|xyz
\ \
所以在匹配之前有一个空字符串,在匹配之后有一个空字符串。由于上述分裂行为,插入了中间的两个项目:
如果在
Regex.Split
表达式中使用捕获括号,则任何捕获的文本都包含在结果字符串数组中。例如,如果在捕获括号内的连字符上拆分字符串“plum-pear”,则返回的数组包含一个包含连字符的字符串元素。