2010-04-20 6 views
6

Je me demande s'il est possible d'obtenir MatchCollection avec toutes les correspondances, même s'il y a une intersection entre elles.regex correspond à l'intersection en C#

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

Ce code renvoie 1, mais je veux qu'il revienne 2. Comment l'exécuter?
Nous vous remercions de votre aide.

Répondre

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

va parcourir la chaîne commençant l'itération suivante un caractère après la position de la correspondance précédente, trouvant ainsi toutes les correspondances.

+0

On dirait ce dont j'ai besoin. Merci. – StuffHappens

+0

+1 Très agréable J'allais recommander quelque chose de similaire avec string.indexOf en supposant que la chaîne de recherche était une chaîne de vanille. Je me demande s'il existe une regex complexe pour laquelle cette méthode ne fonctionnerait pas ..... hmmm – juharr

0

Vous pouvez le faire dans une boucle while en remplaçant "a" par "a" et en le faisant correspondre à l'expression régulière jusqu'à ce qu'il n'y ait plus de correspondance.

+0

Cet exemple est simplifié. J'ai une chaîne d'entrée beaucoup plus complexe et une regex beaucoup plus complexe. Votre solution ne fonctionnera donc pas dans ce cas. Merci quand même. – StuffHappens

Questions connexes