2010-01-22 56 views

回答

7

给该组的标签名称:

(?<TagName>.*) 

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

+2

另一种语法是'(?'TagName'。*)'。 – 2010-01-22 22:27:16

+0

非常感谢您的回答。我不知道为什么我认为这会很糟糕。 – Payne 2010-01-22 22:36:18

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); 
} 

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

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