如何使用正则表达式在C#中创建名称组,这是一种很好的做法吗?
提前致谢。
答案 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)
命名捕获组很好,通常使用数字捕获组的简单正则表达式可能更简洁,这里有一些提示: