Regex.Split() zostawia elementy w grupach

Regex.Split() zostawia elementy w grupach
Mondonno
  • Rejestracja:prawie 6 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Polska
  • Postów:88
0

Witam,
Mam bardzo krótke pytanko.
Mam następujący RegEx \\textbf\{Zadanie \d+\} ?(\w\d)?\\\\ który powinien mi "zmetchować" np to: \textbf{Zadanie 78} m8\\, \textbf{Zadanie 79} c8\\ lub to: \textbf{Zadanie 80} s8\\ albo to \textbf{Zadanie 70} c5\\. Wszystko działa jak powinno ale... Po wywołaniu <MojRegexObj>.Split(text) dostaję prawidłowy string ale poza tym dzieją się rzeczy śmieszne. :/

Wygląda na to jakby Split() na regexie zostawiał to co jest w grupach jako osobny split. Np.\textbf{Zadanie 78} m8\\ jest dzielone na m8, TutajZawartośćMatch'a Jest to strasznie dziwne, nigdy się z czymś takim. :D

Dziękuję za każdą pomoc.
Jest to szybkie pytanie więc po udzieleniu odpowiedzi możecie je usunąć.


obscurity
  • Rejestracja:około 6 lat
  • Ostatnio:dzień
0

Ale w jaki sposób chcesz dzielić string przy użyciu takiego regexpa? Ciężko mi sobie nawet wyobrazić jak miałby wyglądać rezultat takiej operacji.
Zazwyczaj .Split się używa do dzielenia stringów po prostych regexpach jak np [/-] żeby podzielić string typu "2020/10/20" albo "2020-10-20" po jednym z dwóch dopuszczalnych znaków na składowe "2020", "10" i "20".

Nie chcesz czasem użyć po prostu .Matches żeby znaleźć dopasowania regexpa?


"A car won't take your job, another horse driving a car will." - Horse influencer, 1910
Mondonno
@obscurity: Chcę po prostu odzielić mój string przez owy regex, nie chcę znaleźć dopasowań tylko chcę mieć to wszystko co nie matchuje się z moim regexem w tablicy po kolei.
KA
  • Rejestracja:ponad 4 lata
  • Ostatnio:9 dni
  • Postów:49
0

Trochę nie rozumiem intencji

Jeżeli twoim założeniem jest podzielenie teksu za pomocą regexu
JakisTeksAJakisTextA REGEX JakisTextBJakiśTextB

to var splitedArray = Regex.Split("JakisTeksAJakisTextA REGEX JakisTextBJakiśTextB","REGEX")
Zwróci ci dwuelementową tablice
Array[0] = "JakisTeksAJakisTextA "
Array[1] = "JakisTextBJakiśTextB"

Mondonno
@Kardash: Chodzi o to że to co mam grupie na Regexie Split() dodaje do wyniku tak jak powiedział obscurity.
obscurity
  • Rejestracja:około 6 lat
  • Ostatnio:dzień
0

wygląda na to że użycie grup w regexpie podanym do Split dodaje zawartość grup do wyniku, usuń grupy (nawiasy) z regexpa i wszystko działa chyba tak jak chcesz:

Kopiuj
new Regex(@"\\textbf\{Zadanie \d+\} ?\w\d\\\\").Split(@"przed\textbf{Zadanie 78} m8\\po")

wyjście:

["przed", "po"]


"A car won't take your job, another horse driving a car will." - Horse influencer, 1910
Mondonno
@obscurity: Ale ja potrzebuję mieć \w\d jako opcjonalne
obscurity
@Mondonno: to zrób non capturing group - (?:\w\d)
Mondonno
@obscurity: Super działa :D Dzięki za pomoc :)

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.