Python: Wyrażenia regularne – moduł re (regex)

14-Lut-2018

O wyrażeniach regularnych pisałem już tutaj: https://www.mobilo24.eu/wyrazenia-regularne-bardzo-krotki-przewodnik/

Teraz parę słów o wyszukiwaniu w napisie liczb z wykorzystaniem regular expressions (regex) w Pythonie:

Ilekroć chcesz pracować z wyrażeniami regularnymi zacznij od zaimportowania modułu re

import re

Załóżmy, że mamy do czynienia z napisem „OSTP 288” i chcemy wyciągnąć z niego 288. Po kolei należy:

  • korzystając z funkcji re.compile utworzyć prekompilowane wyrażenie regularne
  • korzystając z funkcji re.match przeprowadzić wyszukiwanie wyrażeń pasujących do maski
  • wynik(i) są dostępne za pomocą metody groups(). Jeśli coś zostało znalezione, to wszystkie pasujące dopasowania znajdą się właśnie tutaj
  • a wyrażenie regularne? Tutaj mówi tak
    • .* – ma być dowolny ciąg dowolnych znaków
    • (\d+) – tutaj jest zdefiniowana grupa dopasowania – o tym świadczą () – i tu zostanie zakwalifikowana jedna lub więcej + cyfra \d
    • .* – a potem ma być znowu dowolna ilość dowolnych znaków:

To teraz przyjmijmy że mamy do czynienia z napisem ‚1234/5678’. Chcemy wydobyć liczby przed i po /. Właściwie czynności do wykonania są takie same, może tylko wyrażenie regularne wymaga małego wyjaśnienia:

  • (\d+) – pierwsza grupa dopasowania zbudowana tak samo jak poprzednio
  • / – czyli jawnie podany znak jaki musi występować po pierwszej odkrytej liczbie
  • (\d+) – druga grupa dopasowania
  • Zauważ, że nie dopuszczamy występowania w napisie jakichkolwiek innych znaków poza liczbą, ukośnikiem i liczbą

I ostatni przykład. Tu mamy tekst ‚The price for 10 pieces is 330 USD’ i chcemy z niego wydobyć cenę 330. Logika postępowania taka sama jak poprzednio, a wyrażenie regularne:

  • .* – dowolna ilość dowolnych znaków
  •  – spacja
  • (\d+) – grupa dopasowania
  •  USD$ – spacja, napis USD i na tym koniec tekstu. Nic więcej tam nie może występować – to właśnie znaczenie znaku $

 

Dodaj komentarz:

Autor: Rafał Kraik