Каков предпочтительный способ фильтрации регулярных выражений для поиска совпадений в C # - PullRequest
8 голосов
/ 09 августа 2010

Новый вопрос возник в связи с моим более ранним вопросом . У меня есть код, который использует регулярные выражения для поиска адресов электронной почты. Он отлично работает, за исключением того, что он возвращает повторяющиеся совпадения. Я искал этот сайт и обнаружил вопрос давным-давно, который имел дело с аналогичной проблемой, и ответ имел какое-то отношение к смешению логики регулярных выражений со строкой [] и методом Distinct (). К сожалению, мое понимание массивов все еще ограничено.

Мой код помещает все совпадения с регулярным выражением в MatchCollection. Кроме того, как мне взаимодействовать с этим MatchCollection, чтобы добавлять в регулярное выражение только уникальные совпадения?

1 Ответ

11 голосов
/ 09 августа 2010

Вы можете сделать это, используя Distinct в .NET 3.5 или новее, если вы позвоните Cast в вашем матчеколлекции, так что вы можете использовать методы расширения LINQ:

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

Это предполагает, что у вас есть следующие использования в верхней части вашего файла:

using System.Linq;
using System.Collections.Generic;
...