2010-04-20 10 views
6

Mi chiedo se è possibile ottenere MatchCollection con tutte le partite, anche se c'è intersezione tra di loro.regex corrispondenze con intersezione in C#

string input = "a a a"; 
Regex regex = new Regex("a a"); 
MatchCollection matches = regex.Matches(input); 
Console.WriteLine(matches.Count); 

Questo codice restituisce 1, ma voglio restituirlo 2. Come raggiungerlo?
Grazie per il vostro aiuto.

risposta

7
string input = "a a a"; 
Regex regexObj = new Regex("a a"); 
Match matchObj = regexObj.Match(input); 
while (matchObj.Success) { 
    matchObj = regexObj.Match(input, matchObj.Index + 1); 
} 

itererà sulla stringa iniziando l'iterazione successiva di un carattere dopo la posizione della corrispondenza precedente, quindi trovando tutte le corrispondenze.

+0

Sembra proprio quello di cui ho bisogno. Grazie. – StuffHappens

+0

+1 Molto bello stavo per raccomandare qualcosa di simile con string.indexOf assumendo che la stringa di ricerca fosse una stringa vanilla. Mi chiedo se ci sia una regex complessa che questo metodo non avrebbe funzionato per ..... hmmm – juharr

0

È possibile farlo in un ciclo while sostituendo "a a" con "a" e abbinandolo un'altra volta contro la regex finché non vi è alcuna corrispondenza.

+0

Questo esempio è semplificato. Ho una stringa di input molto più complessa e una regex molto più complessa. Quindi la tua soluzione non funzionerà in quel caso. Grazie comunque. – StuffHappens

Problemi correlati