Wyrażenie regularne

0

Witam, mam problem z napisaniem odpowiedniego wyrażenia regularnego aby wybrać miasta z podanych informacji:
Dane wyglądają następująco:

00.000000 00.000000; X-XX000-0000-0; Polska; Olsztyn; Olsztynska 12a;
00.000000 00.000000; X-XX000-0000-0; Polska; Warszawa; Niepodleglosci 123;
00.000000 00.000000; X-XX000-0000-0; Polska; Krakow; Rakowicka 7;

Każda informacja jest oddzielona średnikami. Da radę określić np. że interesują mnie dane pomiędzy 3 a 4 średnikiem?

1

Tak. Na Linuxie np: cat plik_z_danymi | cut -d ';' -f5 (numeruje sie od 1).
ALternatywa: w wiekszosci jezykow programowania jes komenda split, dzialaca string po podanym separatorze i pakujacy poszczegolne czesci do listy/tablicy.

0

Dziękuję za szybką odpowiedź. Niestety jest to zamknięty system, a dokładniej oprogramowanie, które pozwala grupować dzięki wyrażeniom regularnym. Nie mogę wyciągnąć pliku i użyć rozwiązania na Linuxie. Co byłoby dużym ułatwieniem. Jedynie mogę wpisać jedną linijkę wyrażenia sprawdzić rezultat.

Np. dla grupowania/wyszukania informacji X-XX00-0000-0 użyłem wyrażenia [A-Z]{1}-[A-Z0-9]{5}-[0-9]{4}-[0-9]{1}. Lecz dla miasta to się nie sprawdzi dlatego zastawiam się czy da radę aby wyszukiwanie zaczynac np. od 'Polska;' i kończąc na kolejnym ';' ?

0

W tym celu fragment wyrażenia otacza się nawiasem, a później wyciąga za pomocą group:
https://www.javamex.com/tutor[...]ing_groups.shtml#.WnwWQMlKW-E

0

Zawsze możesz samemu napisać taka prostą funkcje :)

0

Dzięki za propozycje. Lecz jestem ograniczony jedynie do wpisanie jednego wyrażenia regularnego i tu nie również nie da się napisać jakichkolwiek funkcji czy zmiennych.

Program automatycznie grupuje po wpisanym wyrażeniu regularnym i tak dla informacji X-XX00-0000-0 (gdzie X to dowolna litera [bez PL znaków] a 0 to dowolna cyfra) użyłem wyrażenia [A-Z]{1}-[A-Z0-9]{5}-[0-9]{4}-[0-9]{1}.

Sądziłem że po wpisaniu wyrażenia (Polska; )[a-zA-Z]{3,15} wynik mam prawie prawidłowy jednak pojawia mi się w oczywiście: Polska; Warszawa. Jakieś pomysły na to aby w wyniku pojawiła mi się sama Warszawa ?

1

Spróbuj taki regex: (?:[^;]*;){3}([^;]*);

EDIT: Albo taki: [^;]+(?=;[^;]+;$)

0

Super. Drugie wyrażenie działa!!!

Jesteś wielki!

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