2010-04-20 46 views
6

Me pregunto si es posible obtener MatchCollection con todas las coincidencias, incluso si hay una intersección entre ellas.regex coincide con la intersección en C#

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

Este código devuelve 1, pero quiero que regrese 2. ¿Cómo lograrlo?
Gracias por su ayuda.

Respuesta

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); 
} 

se iterar sobre la cadena que comience la siguiente iteración un carácter después de la posición del partido anterior, por lo tanto, la búsqueda de todos los partidos.

+0

Parece que lo que necesito. Gracias. – StuffHappens

+0

+1 Muy bien, iba a recomendar algo similar con string.indexDe suponer que la cadena de búsqueda era una cadena de vainilla. Me pregunto si hay una expresión regular compleja para la que este método no funcionaría ... hmmm – juharr

0

Puede hacerlo en un ciclo while reemplazando "a a" por "a" y hacer coincidirlo otra vez con la expresión regular hasta que no haya coincidencias.

+0

Este ejemplo está simplificado. Tengo una cadena de entrada mucho más compleja y una expresión regular mucho más compleja. Entonces su solución no funcionará en ese caso. Gracias de cualquier manera. – StuffHappens

Cuestiones relacionadas