1

Temat: Wyrażenia regularne i adresy

Przechowuję w tabeli adresy instytucji. W kolumnach 'ulica', 'nr_domu', 'nr_lokalu' osobno przechowuję każdą z tych danych. Niestety użytkownicy jak i wcześniejsze importy pozostawiły mi śmieci w postaci 'ulica -> Andersa 123/2'.

Chciałbym oddzieliś numery od nazw ulic i umieścić je w odpowiednich kolumnach. Czy da się to jakoś ładnie zrobić w zapytaniu czy też lepiej zrzucić dane i użyć awk?

2

Odp: Wyrażenia regularne i adresy

Pytanie czy dla tych śmieci da się napisac wyrażenie regularne? Próbowałeś coś wymyślić, w sumie tylko ty znasz wszystkie te śmieci.

3

Odp: Wyrażenia regularne i adresy

Zrzuciłem sobie dane do pliku i próbuję je jakoś przetworzyć. Wykombinowałem, że większość pasuje do wzoru
/^
(
([0-9]{1,2} )* # Ew. dzień miesiąca 22 lipca, 3 maja
[A-Za-z- ]+ # Nazwa ulicy
)
(.*)$/ # Reszta śmieci do końca wiersza to pewnie number domu, lokalu itp.

Chciałbym to teraz rozdzielić na część z ulicą i część z numerami.

4

Odp: Wyrażenia regularne i adresy

Doszedłem to takiego momentu w którym jestem zadowolony z wyników regex

([0-9]+)([ ]+)([0-9]+)  -> $1/$3
(.*)( [0-9\/\- ]+[ ]*[a-zA-Z]*)$ -> $1 do kolumny street, a $2 do kolumny house_number

Pozostaje mi to jeszcze pożenić z pg

5

Odp: Wyrażenia regularne i adresy

Jeśli udałoby się znaleźć jakiś separator obu wartość (albo go sztucznie wstawić) to wtedy rozwiązanie wydaje się być proste, wystarczy skorzystać z regexp_split_to_array. W przeciwnym razie trzeba troche pokombinować.

Funkcje stringowe (m.in.) regexpy masz tu
http://www.postgresql.org/docs/current/ … tring.html

PS
Jak masz wersję postgresa?