【问题标题】:Regular Expression Named Groups: Good or Bad?正则表达式命名组:好还是坏?
【发布时间】:2010-01-22 22:24:40
【问题描述】:

如何使用正则表达式在 C# 中创建具有名称的组,这是一种好的做法吗?

提前致谢。

【问题讨论】:

    标签: c# .net regex


    【解决方案1】:

    给组一个标签名称:

    (?<TagName>.*)
    

    我绝对认为这是一个很好的做法。考虑更改正则表达式时会发生什么。如果您使用索引来提取数据,那么这些组的顺序可能会发生变化。通过命名它们,您准确地指定了您认为该组包含的数据,因此它也是一种自我记录的形式。

    【讨论】:

    • 替代语法是(?'TagName'.*)
    • 非常感谢您的回答。我不知道为什么我认为它会很糟糕。
    【解决方案2】:

    正如其他人指出的那样,语法是(?&lt;GroupName&gt;....)

    这是一个示例,演示如何创建一个名为 Key 的组和一个名为 Value 的组,同样重要(但经常被遗忘) - 如何从生成的匹配对象中按名称提取组:

    string s = "foo=bar/baz=qux";
    Regex regex = new Regex(@"(?<Key>\w+)=(?<Value>\w+)");
    foreach (Match match in regex.Matches(s))
    {
        Console.WriteLine("Key = {0}, Value = {1}",
            match.Groups["Key"].Value,
            match.Groups["Value"].Value);
    }
    

    我通常不会将命名组用于非常简单的表达式,例如,如果只有一个组。

    对于具有许多包含复杂表达式的组的更复杂的正则表达式,使用命名组可能是一个好主意。另一方面,如果您的正则表达式太复杂以至于您需要这样做,那么可能看看您是否可以通过其他方式解决问题,或者将其拆分为您的算法分成更小、更简单的步骤。

    【讨论】:

      【解决方案3】:

      命名捕获组很好,通常使用更简单的正则表达式,使用数字捕获组可能更流畅,这里有一些提示:

      http://www.regular-expressions.info/named.html

      【讨论】:

      • 非常感谢您的回答和链接。
      猜你喜欢
      • 2014-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-17
      • 2010-09-29
      • 2018-01-29
      相关资源
      最近更新 更多