2010-04-26 16 views
30

Non sono stato in grado di trovare nulla online per quanto riguarda questo. C'è RegexOptions, ma non ha Global come una delle sue opzioni. Anche l'elenco dei modificatori in linea non menziona la corrispondenza globale..NET Regex supporta la corrispondenza globale?

In poche parole, ho una regex per analizzare qualcosa come

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

in argomento separato coppie nome/valore che utilizzano questa espressione regolare:

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

ma la classe .NET Regex doesn Fallo globalmente (in modo iterativo). Quindi, per far sì che questo funzioni, dovrei fare una corrispondenza, quindi rimuoverlo dalla stringa dell'argomento e ricominciare da capo finché non avrò esaurito tutti gli argomenti.

Sarebbe preferibile eseguire un'espressione regolare una volta e quindi ripetere il ciclo sui gruppi di corrispondenza per ottenere le coppie di valori nome. È possibile? Cosa mi manca?

risposta

41

Si sta cercando il Regex.Matches method (plural), che restituisce una raccolta contenente tutte le corrispondenze nella stringa originale.

+0

ugh ... grazie! L'ho completamente perso. Gli darò uno sparo ora. – Dave

+0

puoi raccomandare il modo più pulito per ottenere le coppie di valori nominali? Quando uso le corrispondenze, restituisce due gruppi: '--arga =" arg1 "' e '--argb =" arg2 "', ma speravo in questi, ** più ** 'arga',' arg1', 'argb' e' arg2'. – Dave

+3

Controlla la proprietà 'Groups [1]' di ogni oggetto 'Match'. – SLaks

Problemi correlati