2010-04-26 16 views
30

No he podido encontrar nada en línea con respecto a esto. Hay RegexOptions, pero no tiene Global como una de sus opciones. La lista de modificadores en línea tampoco menciona la coincidencia global..NET Regex admite la coincidencia global?

En pocas palabras, tengo una expresión regular para analizar algo así como

--arga= "arg1" --argb ="arg2" 

argumento separado en pares de nombre/valor utilizando esta expresión regular:

--(\\w+)\\s*=\\s*\"(\\w+)\"\\s* 

pero la clase .NET Regex doesn no hacerlo globalmente (iterativamente). Entonces para poder hacer que esto funcione, tendría que hacer una coincidencia, luego eliminar esto de la cadena del argumento, y repetir una y otra vez hasta que haya agotado todos los argumentos.

Sería mejor ejecutar la expresión regular una vez, y luego recorrer los grupos de coincidencia para obtener los pares de valores nominales. es posible? ¿Qué me estoy perdiendo?

Respuesta

41

Está buscando Regex.Matches method (plural), que devuelve una colección que contiene todas las coincidencias en la cadena original.

+0

ugh ... gracias! Me perdí completamente eso. Voy a darle una oportunidad ahora. – Dave

+0

¿Puede recomendar la manera más limpia de obtener los pares de valores nominales? Cuando uso Matches, devuelve dos grupos: '--arga =" arg1 "' y '--argb =" arg2 "', pero esperaba estos, ** más ** 'arga',' arg1', 'argb', y' arg2'. – Dave

+3

Comprueba la propiedad 'Groups [1]' de cada objeto 'Match'. – SLaks

Cuestiones relacionadas