Jak zwrócić wszystkie dopasowania wyrażenia regularnego?

0

Cześć

Powiedzmy, że mam wyrażenie regularne:

(?<opr>[\#!']\d+)*

czyli mam nazwaną grupę o nazwie opr. Jeśli mamy tekst wejściowy:

{1-3!1#2}

to mamy dwa dopasowania:

!1
#2

Jak mogę wyłapać wszystkie dopasowania "opr" z tekstu wejściowego?

0

Chyba wyraziłem się nieprecyzyjnie... Chodzi o to, że w wyrażeniu regularnym mam kilka grup nazwanych. I teraz chciałbym z tekstu wejściowego wyłapać wszystkie wystąpienia zdefiniowane w nazwanej grupie przez podanie nazwy grupy. Czyli po prostu zamiast rozbijać duże wyrażenie regularne na mniejsze, chciałbym w ramach tego dużego wyrażenia wyławiać teksty przefiltrowane przez podanie nazwy grupy. O ile nie jest to trudne w przypadku jednoznacznie zdefiniowanych tekstów, to jest to problematyczne jeśli tak jak w moim przykładzie, podajemy zakres znaków. Wtedy nie działa to tak jak oczekuję.
Z powodu najprawdopodobniej mojego niezbyt imponującego doświadczenia z wyrażeniami regularnymi, używam do tego celu Regex.Replace. Jako "pattern" podaję ${nazwa}. Szukam doskonalszego sposobu, stąd ten wątek tutaj.

0

Twój regex jest nieprawidłowy. Zgadując po tym, co chcesz osiągnąć, kod powinien wyglądać mniej więcej tak:

var regex = new Regex("([\\#!']\\d+)");
var matches = regex.Matches("{1-3!1#2}");
foreach (Match match in matches)
    Console.WriteLine(match.Value);
0

Chodziło mi dokładnie o to, co napisałem na początku. Mam dość złożone wyrażenie regularne, które muszę dzielić na mniejsze. Chodzi mi tylko o to, żeby zamiast dzielić to złożone, żeby je tagować poszczególne człony, a za pomocą tagów przechwytywać dopasowania. To co podałeś to jest oczywiście właściwa metoda do przechwytywania dopasowań do całych wyrażeń regularnych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1