C# 正则表达式匹配与拆分相同的字符串

C# Regex Match Vs Split for same string

我在 Linqpad 中使用正则表达式来提取字符串。我有一些疑问,我正在分享。任何人都可以对这件事有所了解。 -

string s = "abc|xyz";
Regex.Match(s, @"(\w*)[|]{1}(\w*)").Dump();
Regex.Split(s, @"(\w*)[|]{1}(\w*)").Dump();

使用 Regex.Match 我得到了两个我可以轻松提取的组。

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

让我们分析一下您的字符串:

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

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

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

abc|xyz
\      \

所以在匹配之前有一个空字符串,在匹配之后有一个空字符串。由于前面提到的拆分行为,插入了中间的两项:

If capturing parentheses are used in a Regex.Split expression, any captured text is included in the resulting string array. For example, if you split the string "plum-pear" on a hyphen placed within capturing parentheses, the returned array includes a string element that contains the hyphen.