Mam ciąg znaków zawierający kilka komentarzy HTML. Muszę liczyć unikalne dopasowania wyrażenia.Jak uzyskać dopasowanie wyrażenia regularnego, które zostanie dodane tylko raz do kolekcji dopasowań?
Na przykład ciąg może być:
var teststring = "<!--X1-->Hi<!--X1-->there<!--X2-->";
Obecnie używać tego, aby uzyskać mecze:
var regex = new Regex("<!--X.-->");
var matches = regex.Matches(teststring);
Wyniki to 3 mecze. Chciałbym jednak, aby były to tylko 2 mecze, ponieważ są tylko dwa unikalne mecze.
Wiem, że mogę przepuścić przez wynikową MatchCollection i usunąć dodatkowe dopasowanie, ale mam nadzieję, że istnieje bardziej eleganckie rozwiązanie.
Klasyfikacja: Przykładowy ciąg znaków jest znacznie uproszczony w stosunku do aktualnie używanego. Nie może być łatwo X8 lub X9, i prawdopodobnie są dziesiątki każdego w ciągu.
Podobał mi się ten pomysł, ale niestety wyniki nie są zgodne z oczekiwaniami. W moim teście jednostkowym (który ma znacznie większy ciąg) uzyskałem 8 wyników, gdy powinienem był otrzymać 4. Nie jestem pewien jaka jest różnica między RegexBuddy a tym, czego używam. :( –
Próbowałem również używać Distinct(), ale MatchCollection, mimo że pochodzi od IEnumerable, nie wydaje się rozpoznawać tego. –
Jaki jest twój znacznie większy ciąg? W MatchCollection najprawdopodobniej będziesz musiał użyć var stuff = theMatchCollection.OfType(). Wybierz (m => m.Value) .Distinct() lub coś takiego –
Svish