¿Hay alguna forma de obtener el nombre de un grupo capturado en C #?
string line = "No.123456789 04/09/2009 999";
Regex regex = new Regex(@"(?<number>[\d]{9}) (?<date>[\d]{2}/[\d]{2}/[\d]{4}) (?<code>.*)");
GroupCollection groups = regex.Match(line).Groups;
foreach (Group group in groups)
{
Console.WriteLine("Group: {0}, Value: {1}", ???, group.Value);
}
Quiero obtener este resultado:
Grupo: [No sé qué debería ir aquí], Valor: 123456789 04/09/2009 999 Grupo: número, Valor: 123456789 Grupo: fecha, Valor: 09/04/2009 Grupo: código, Valor: 999
La forma más limpia de hacer esto es usando este método de extensión:
Una vez que este método de extensión esté en su lugar, puede obtener nombres y valores como este:
fuente
Desde .NET 4.7, hay
Group.Name
propiedad disponible .fuente
Debería usar
GetGroupNames();
y el código se verá así:fuente
¡La clase Regex es la clave para esto!
http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.groupnamefromnumber.aspx
fuente
group.Index
es la posición del inicio del grupo de coincidencia en el texto original. No es el "índice" del grupo en la expresión regular.