正则表达式命名组:好还是坏?

时间:2010-01-22 22:24:41

标签: c# .net regex

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

提前致谢。

3 个答案:

答案 0 :(得分:7)

为该组添加标签名称:

(?<TagName>.*)

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

答案 1 :(得分:2)

正如其他人指出的那样,语法是(?<GroupName>....)

这是一个示例,演示如何创建一个名为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);
}

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

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

答案 2 :(得分:1)

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

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