2010-08-08 11 views
8

Une nouvelle question a été soulevée par rapport à un earlier question of mine. J'ai du code qui utilise une regex pour trouver des adresses e-mail. Cela fonctionne très bien, sauf qu'il renvoie des correspondances en double. J'ai cherché sur ce site et trouvé une question depuis longtemps qui traitait d'un problème similaire, et la réponse avait quelque chose à voir avec le mélange de la logique regex avec une chaîne [] et la méthode Distinct(). Malheureusement, ma compréhension des tableaux est encore limitée.Quel est le moyen préféré pour filtrer une recherche regex pour les correspondances en double dans C#

Mon code place toutes les correspondances regex dans un MatchCollection. En dehors de cela, comment puis-je interagir avec ce MatchCollection pour ajouter seulement des correspondances uniques à l'expression régulière?

Répondre

11

Vous pouvez le faire en utilisant Distinct dans .NET 3.5 ou plus récent si vous appelez Cast sur votre collection de correspondance afin que vous puissiez utiliser les méthodes d'extension LINQ:

MatchCollection matchCollection = Regex.Matches(input, pattern); 
List<string> matches = matchCollection 
    .Cast<Match>() 
    .Select(m => m.Value) 
    .Distinct() 
    .ToList(); 

Cela suppose que vous avez les usings suivants à En haut de votre fichier:

using System.Linq; 
using System.Collections.Generic; 
+0

Fonctionne comme un charme. Merci beaucoup. – Stev0