2010-01-22 15 views

Respuesta

7

dar al grupo un nombre de etiqueta:

(?<TagName>.*) 

estoy totalmente de que esta es una buena práctica. Considera lo que sucede cuando cambias la expresión regular. Si usa índices para extraer datos, el orden de estos grupos podría cambiar. Al nombrarlos, está especificando exactamente los datos que cree que contiene el grupo, por lo que también es una forma de auto-documentación.

+2

La sintaxis alternativa es '(? 'TagName'. *)'. –

+0

Muchas gracias por la respuesta. No sé por qué pensé que sería malo. – Payne

1

grupos de captura nombradas son agradables, aunque por lo general con el más simple de expresiones regulares de usar el grupo de captura numérico es probablemente más streamliney, algunos consejos aquí:

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

+0

Muchas gracias por su respuesta y por el enlace. – Payne

2

Como otros han señalado que la sintaxis es (?<GroupName>....).

He aquí un ejemplo que muestra cómo crear un grupo llamado Key y un grupo llamado Value, e igualmente importante (pero con frecuencia olvidado) - cómo extraer los grupos por su nombre desde el objeto partido resultante:

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

Normalmente no usaría grupos con nombre para expresiones muy simples, por ejemplo, si solo hay un grupo.

Para expresiones regulares más complejas con muchos grupos que contienen expresiones complejas, probablemente sería una buena idea usar grupos con nombre. Por otro lado, si su expresión regular es tan complicada que necesita hacer esto, podría ser ser una buena idea para ver si puede resolver el problema de otra manera, o dividirlo en pasos más pequeños y simples. .

Cuestiones relacionadas