2010-04-26 2 views
30

Je n'ai pas été en mesure de trouver quelque chose en ligne à ce sujet. Il y a RegexOptions, mais Global n'a pas l'une de ses options. La liste des modificateurs en ligne ne mentionne pas non plus de correspondance globale..NET Regex prend-il en charge la correspondance globale?

En un mot, j'ai un regex pour analyser quelque chose comme

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

en paires nom d'argument distinct/valeur en utilisant cette expression rationnelle:

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

mais la classe .NET Regex doesn ne le faites pas globalement (itérativement). Donc, pour que cela fonctionne, je devrais faire une correspondance, puis retirer ceci de la chaîne d'arguments, et faire une boucle encore et encore jusqu'à ce que j'aie épuisé tous les arguments.

Il serait plus agréable d'exécuter une fois l'expression régulière, puis de faire une boucle sur les groupes de correspondance pour obtenir les paires de valeurs de nom. Est-ce possible? Qu'est-ce que je rate?

Répondre

41

Vous recherchez le Regex.Matches method (plural), qui renvoie une collection contenant toutes les correspondances dans la chaîne d'origine.

+0

euh ... merci! J'ai complètement manqué ça. Je vais tenter le coup maintenant. – Dave

+0

pouvez-vous recommander le moyen le plus propre d'obtenir les paires de valeur de nom? Quand j'utilise Matches, il retourne deux groupes: '--arga =" arg1 "' et '--argb =" arg2 "', mais j'espérais que ceux-ci, ** plus ** 'arga',' arg1', 'argb', et' arg2'. – Dave

+3

Vérifiez la propriété 'Groups [1]' de chaque objet 'Match'. – SLaks

Questions connexes