Wyrazenia regularne


Wyrażenia regularne to pewne "wzorce", za pomocą których można opisać ciąg znaków. Za ich pomocą można określić z czego ma się dokładnie składać np. adres e-mail. Istnieje wiele notacji, które służą zapisywaniu wyrażeń regularnych i jedną z nich jest notacja Pythona. Aby skorzystać z narzędzi jakie one nam oferują, wystarczy zaimportować moduł re. Na początku rozważmy najprostszy możliwy przykład:

import re

tekst = """Wyobraz sobie, ze ten tekst zawiera numer
PIN 9434 twojej karty do bankomatu, a ty wlasnie go
zapomniales. Jak szybko go odnalezc?"""

sciezka = r'\d\d\d\d'
dopasowanie = re.search(sciezka, tekst)

if dopasowanie: #Sprawdzamy czy udalo sie cos znalezc
    numer = dopasowanie.group()
    print numer

W linijce sciezka = r'\d\d\d\d' właśnie utworzyliśmy wyrażenie regularne.

Znak r przed ' wyłącza zwykłe formatujące dzialanie \. Jest to bardzo ważne ponieważ wyrażenia regularne również buduje się z wykorzystaniem tego znaku. Dołączanie r przed każdym wyrażeniem jest powszechnie rekomendowane jako dobra praktyka programistyczna. Zapis r'\d' oznacza liczbę dziesiętną, natomiast r'\d\d\d\d' oznacza 4 następujące zaraz po sobie liczby dziesiętne. Funkcja search wyszukuje ciąg znaków i zwraca go w postaci specjalnego obiektu Match. Aby wydobyć z niego napis posługujemy się metodą group().

Wyrażenia regularne są często używane przez programistów, ale są dosyć skomplikowane. Zanim się na nie zdecydujesz, poszukaj najpierw prostszych alternatyw. Poniżej kolejny przykład wyrażenia regularnego:

r"^(From|To|Cc).*[email protected]"
  • Znak grotu ^ oznacza, że tekst musi być na początku lini. Następnie mamy słowa zgrupowane w nawiasie: (From|To|Cc) Teraz wiemy, że napis ma się zaczynać od jednego ze słów oddzielonych |. Ten znak, to operator "lub" (ang. OR).
  • Natępne .*? oznacza niezachłanne dopasowanie znaków za wyjątkiem znaku '\n'. Dopasowanie niezachłanne to dopasowanie jak najmniejszej liczby znaków.
  • Znak . oznacza każdy znak za wyjątkiem znaku nowej lini.
  • * oznacza powtórzenie 0 lub więcej razy i znak ? oznacza dopasowanie niezachłanne.

Skonstruowane przez nas wyrażnie odpowiada dwum następującym napisom:

From: [email protected]

To: !asp]<,.      [email protected]

Kompletny opis składni wyrażeń regularnych znajduje się w dokumentacji Pythona.

Tutaj znajduje się przykład "poprawnego" wzorca opisującego adres email (jak jeden z występujących w poniższym ćwiczeniu): wzorzec


Copyright © learnpython.org. Read our Terms of Use and Privacy Policy