Developer.

Python: Regular Expressions

Wprawadzenie do wyrażen regularnych zacznę od złotej mysli :)

Some people, when confronted with a problem, think: “I know, I’ll use regular expressions.” Now they have two problems.

Wyrażenia regularne

[aeiou] - dowolna samogłoska

[^aeiou] - dowolna spółgłoska (^ - negacja)

[a-z] - dowolna mała litera z zakresu a-z

\d - dowolna liczba dziesiętna, odpowiednik [0-9]

\D - dowolna “nie-cyfra”, odpowiednik [^0-9]

\s - dowolny “biały znak”, odpowiednik [\t\n\r\f\v]

\S - dowolny “nie-biały znak” znak, odpowiednik [^\t\n\r\f\v]

\w - dowolny znak alfanumeryczny, odpowiednik [a-zA-Z0-9_]

\W - dowolny znak nie-alfanumeryczny, odpowiednik [^a-zA-Z0-9_]

\\ – po prostu ukośnik \. – po prostu kropka (nie jest to dowolny znak) [AB] – A lub B (umożliwia zdefiniowanie liczby powtórzeń) A|B – A lub B

Powtórzenia

? - 0 lub 1

* - 0 lub więcej

+ - 1 lub więcej

{n} - powtórzenie dokładnie n razy

{min, max} - liczba wystąpień

^string - początek rozpoczyna się od string

string$ - kończy się na string

Greedy vs lazy

Domyślnie wszystkie kwantyfikatory (+, *, {n,m}, {n,} or {,m}, ?) są chciwe (greedy).

Wzorzec a+ dla frazy aaa zwróci najdłuższy możliwy substring (aaa)

Jeśli chcemy zmienić to zachowanie, musimy postawić znak zapytania ? tuż za kwantyfikatorem: +?, *?, {n,m}?. Wtedy otrzymamy najkrótsze dopasowanie.

Znak zapytania gdy następuje bezpośrednio po kwantyfikatorze to przełącza ten kwantyfikator z trybu “chciwego” na “leniwy”.

Przełączenie trybu nia działa dla {n} - ściśle określona liczba powtórzeń.

Python

import re
pattern = re.compile(r'text') # r - raw string

pattern.match('text') #szuka na początku tekstu
pattern.search('sample text') # szuka w całym ciągu znaków

Przydatne metody dostępne w module re:

  • compile(pattern) – kompiluje zapytanie, co przyspiesza wyszukiwanie

  • findall(pattern, string) – zwraca obiekt z wszystkimi dopasowaniami

  • search(pattern, string) – zwraca obiekt z pierwszym dopasowaniem

  • match(pattern, string) – zwraca dopasowanie o ile jest na początku string’a

Regex101

Narzędzie do budowania i testowania zapytań : Regex101