【问题标题】:C# Regex Match Vs Split for same stringC# 正则表达式匹配与拆分相同的字符串
【发布时间】: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 中有两个空条目。

【问题讨论】:

    标签: c# regex c#-4.0


    【解决方案1】:

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

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

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

    分裂发生在整场比赛中,就在那儿:

    abc|xyz
    \      \
    

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

    如果在Regex.Split 表达式中使用了捕获括号,则任何捕获的文本都将包含在结果字符串数组中。例如,如果将字符串“plum-pear”拆分到位于捕获括号内的连字符上,则返回的数组包含一个包含连字符的字符串元素。

    【讨论】:

    • 可以分组吗?
    • 你为什么不简单地在| char 上拆分,根本不使用正则表达式?
    • 你要么需要塑造整个模式以满足你的需要,要么你可以循环匹配和组,并在循环中构建你的字符串列表(基本上,用 Split 重新实现您需要的差异)。 Split 只是一个方便的函数,自己很容易实现。
    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 2022-10-17
    • 2017-01-09
    • 1970-01-01
    • 2019-11-28
    相关资源
    最近更新 更多