C# 正则表达式匹配与拆分相同的字符串
Posted
技术标签:
【中文标题】C# 正则表达式匹配与拆分相同的字符串【英文标题】:C# Regex Match Vs Split for same string 【发布时间】:2015-03-15 23:19:58 【问题描述】:我在 Linqpad 中使用正则表达式来提取字符串。我有一些疑问要分享。任何人都可以对这个问题有所了解。 -
string s = "abc|xyz";
Regex.Match(s, @"(\w*)[|]1(\w*)").Dump();
Regex.Split(s, @"(\w*)[|]1(\w*)").Dump();
使用Regex.Match
,我可以轻松提取两个组。
。
但我不明白为什么Regex.Split
中有两个空条目。
【问题讨论】:
【参考方案1】:让我们分析一下你的字符串:
abc|xyz
\_____/ <-- the match
\_/ <-- capture group 1
\_/ <-- capture group 2
Regex.Split
将捕获的组包含到结果数组中。
分裂发生在整场比赛中,就在那儿:
abc|xyz
\ \
所以在匹配之前有一个空字符串,在匹配之后有一个空字符串。由于前面提到的拆分行为,中间的两个项目被插入:
如果在
Regex.Split
表达式中使用了捕获括号,则任何捕获的文本都将包含在结果字符串数组中。例如,如果将字符串“plum-pear”拆分到位于捕获括号内的连字符上,则返回的数组包含一个包含连字符的字符串元素。
【讨论】:
可以分组吗? 你为什么不简单地在|
char 上拆分,根本不使用正则表达式?
你要么需要塑造整个模式以满足你的需要,要么你可以循环匹配和组,并在循环中构建你的字符串列表(基本上,用 Split
重新实现您需要的差异)。 Split
只是一个方便的函数,自己很容易实现。以上是关于C# 正则表达式匹配与拆分相同的字符串的主要内容,如果未能解决你的问题,请参考以下文章