2012-04-26 11 views
19

Estoy luchando con un patrón de expresiones regulares que extraiga el texto de una cadena en grupos con nombre.¿Cuál es el patrón de expresiones regulares para grupos de captura nombrados en .NET?

Un ejemplo (algo arbitrario) explicará mejor lo que estoy tratando de lograr.

string input = 
    "Mary Anne has been to 949 bingo games. The last was on Tue 24/04/2012. She won with the Numbers: 4, 6, 11, 16, 19, 27, 45"; 

string pattern = 
    @"(?<Person>\w+?) has been to (?<NumberOfGames>\d+?) bingo games. The last was on (?<Day>...?) (?<Date>...?). She won with the Numbers: (?<Numbers>...?)"; 

Regex regex = new Regex(pattern); 
var match = regex.Match(input); 

string person = match.Groups["Person"].Value; 
string noOfGames = match.Groups["NumberOfGames"].Value; 
string day = match.Groups["Day"].Value; 
string date = match.Groups["Date"].Value; 
string numbers = match.Groups["Numbers"].Value; 

Me parece que no puede conseguir el patrón de expresión regular para trabajar, pero creo que el anterior explica bastante bien. Esencialmente necesito obtener el nombre de la persona, el número de juegos, etc.

¿Alguien puede resolver esto y explicar el patrón real de expresiones regulares que funcionó?

Respuesta

25
string pattern = @"(?<Person>[\w ]+) has been to (?<NumberOfGames>\d+) bingo games\. The last was on (?<Day>\w+) (?<Date>\d\d/\d\d/\d{4})\. She won with the Numbers: (?<Numbers>.*?)$"; 

Otras publicaciones han mencionado cómo extraer los grupos, pero esta expresión regular coincide con su entrada.

1

Suponiendo la expresión regular que funciona el código para hacer que el grupo llamado sería la siguiente:

string title = match.Groups["Person"].Value; 
string drawNumber = match.Groups["NumberOfGames"].Value; 
5

Tenga una mirada en the documentation for Result():

Devuelve la expansión del patrón de sustitución especificado.

No desea ningún patrón de reemplazo, por lo que este método no es la solución correcta.

Quiere acceder a los grupos del partido, entonces haga eso: hay a Groups property.

Con que su código se vería así:

string title = match.Groups["Person"].Value; 
string drawNumber = match.Groups["NumberOfGames"].Value; 

También, como russau señaló correctamente, su patrón no coincide con el texto: Date no es sólo tres caracteres.

+0

gracias, he actualizado la pregunta con su sugerencia aquí, sin embargo, lo que busco es el patrón de expresión regular. –

1

Prueba esto:

string pattern = @"(?<Person>\w+?) has been to (?<NumberOfGames>\d+?) bingo games. The last was on (?<Day>...?) (?<Date>\d+/\d+/\d+). She won with the Numbers: (?<Numbers>...?)"; 

Su expresión regular no coincide con la parte de la fecha de la cadena.

Cuestiones relacionadas