【发布时间】:2010-01-22 22:24:40
【问题描述】:
如何使用正则表达式在 C# 中创建具有名称的组,这是一种好的做法吗?
提前致谢。
【问题讨论】:
如何使用正则表达式在 C# 中创建具有名称的组,这是一种好的做法吗?
提前致谢。
【问题讨论】:
给组一个标签名称:
(?<TagName>.*)
我绝对认为这是一个很好的做法。考虑更改正则表达式时会发生什么。如果您使用索引来提取数据,那么这些组的顺序可能会发生变化。通过命名它们,您准确地指定了您认为该组包含的数据,因此它也是一种自我记录的形式。
【讨论】:
(?'TagName'.*)。
正如其他人指出的那样,语法是(?<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);
}
我通常不会将命名组用于非常简单的表达式,例如,如果只有一个组。
对于具有许多包含复杂表达式的组的更复杂的正则表达式,使用命名组可能是一个好主意。另一方面,如果您的正则表达式太复杂以至于您需要这样做,那么可能看看您是否可以通过其他方式解决问题,或者将其拆分为您的算法分成更小、更简单的步骤。
【讨论】:
命名捕获组很好,通常使用更简单的正则表达式,使用数字捕获组可能更流畅,这里有一些提示:
【讨论】: