Regex- wybór wielu podobieństw

Regex- wybór wielu podobieństw
RA
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:78
0

Witam.
Mam problem z regexem. Opiszę to na przykładzie. Mam przykładowy tekst, chcę c niego wybrać tekst pomiędzy start i stop, w tym wypadku powinien zwrócić dwa podobieństwa.

Kopiuj
START:GLN11111:44344rjnvrhjjnrvnjvnjvrndrjvnvjrkkjvrd
fvvfdmfvjndvfjnfnjvfdnkvfd,amcmds,nvf,n:STOP
START:GLN323f4f43:csm jnvrjrvnjrvjnkrvejnkerv erlrvknvrlvr:STOP

Mój regex wygląda następująco

Kopiuj
Regex reg = new Regex(START:(?<document>.*):STOP, RegexOptions.Singleline);
var m = reg.Matches(input);

Jednak jako m zwracana jest jednoelementowa kolekcja zawierająca selekcję od pierwszego startu do ostatniego stopu, natomiast moim celem były by dwie oddzielne selekcje.

xeo545x39
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Kosmos
  • Postów:1571
1

Zdaje się potrzebny Ci kwantyfikator Lazy oznaczany ?, tylko tam masz błąd chyba gdzie się capturing group zaczyna, po ? brakuje Ci jeszcze znaku i skoro chcesz tekst to czemu tam masz jakiś document?


Co kurła debuguj ten kod i streszczaj się klientowi chce się fixa, a jak nie kurła to odpale visuala i ci pomoge a tego byś nie chciał
RA
?<document> oznacza nadanie nazwy grupy w regexie to nie jest część logiczna regexa logika wyglądała by tak : START:(.*):STOP
xeo545x39
Nazywanie grup nigdy mi nie było potrzebne, to dlatego :P
RA
Po czasie łatwiej wrócić i wtedy wiesz od czego jest konkretna grupa :D
SO
  • Rejestracja:ponad 10 lat
  • Ostatnio:około rok
1

Tak jak napisał @xeo545x39, musisz zmienić regexa żeby nie był zachłanny.

Kopiuj
Regex reg = new Regex("START:(?<document>.*?):STOP", RegexOptions.Singleline); 
RA
dodanie ? rozwiązało sprawę dzięki :D

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.