Cel: Opanowanie elementarnych budulców wzorców: klas znaków, kotwic, kwantyfikatorów i alternacji. Zrozumienie, dlaczego surowe stringi
r"..."są niezbędne.
Python traktuje \n, \t itp. jako sekwencje ucieczki. W wyrażeniach regularnych \d, \w, \s mają inne znaczenie. Aby uniknąć konfliktów, zawsze używamy surowych stringów:
import re
re.search(r'\d+', 'abc 42') # poprawnie: \d to cyfra
re.search('\\d+', 'abc 42') # równoważne, ale trudniejsze do czytania| Wzorzec | Znaczenie |
|---|---|
. |
Dowolny znak oprócz \n (z flagą re.DOTALL – również \n) |
\d |
Cyfra [0-9] |
\D |
Nie-cyfra [^0-9] |
\w |
Znak słowa [a-zA-Z0-9_] |
\W |
Nie-znak słowa |
\s |
Biały znak (spacja, tab, \n, …) |
\S |
Nie-biały znak |
[abc] |
Jeden z: a, b, c |
[^abc] |
Żaden z: a, b, c |
[a-z] |
Litera małа od a do z |
re.findall(r'\d', 'a1b2c3') # ['1', '2', '3']
re.findall(r'[aeiou]', 'Python') # ['o']
re.findall(r'[^aeiou\s]', 'Hi!') # ['H', '!']Kotwice nie dopasowują znaku, lecz pozycję w tekście.
| Wzorzec | Pozycja |
|---|---|
^ |
Początek napisu (lub linii przy re.MULTILINE) |
$ |
Koniec napisu (lub linii przy re.MULTILINE) |
\b |
Granica słowa |
\B |
Brak granicy słowa |
re.findall(r'^\d+', '123 abc') # ['123']
re.findall(r'\bPython\b', 'Python3 Python!') # ['Python', 'Python']| Wzorzec | Liczba powtórzeń |
|---|---|
* |
0 lub więcej |
+ |
1 lub więcej |
? |
0 lub 1 (opcjonalny) |
{n} |
Dokładnie n razy |
{n,m} |
Od n do m razy |
{n,} |
Co najmniej n razy |
re.fullmatch(r'\d{4}-\d{2}-\d{2}', '2024-01-15') # Match
re.findall(r'\d+', 'cena: 42 zl') # ['42']
re.findall(r'colou?r', 'color colour') # ['color', 'colour']re.findall(r'pies|kot', 'mam psa i kota') # ['pies' nie pasuje] -> []
re.findall(r'psa|kota', 'mam psa i kota') # ['psa', 'kota']
re.fullmatch(r'tak|nie', 'tak') # MatchZnaki . * + ? [ ] { } ( ) ^ $ | \ są metaznakmi. Aby je wyszukać dosłownie, poprzedź je \ lub użyj re.escape():
re.findall(r'3\.14', 'pi = 3.14') # ['3.14']
re.escape('3.14') # '3\\.14'examples/syntax_explorer.py– systematyczny przegląd wszystkich kategorii składni na tych samych danych.
python src/_06-regex/02-basic-syntax/examples/syntax_explorer.pyPliki zadań:
python -m pytest src/_06-regex/02-basic-syntax/exercises/test_solutions.py -vczy_tylko_litery(s)– walidacja napisu złożonego wyłącznie z liter.znajdz_liczby_calkowite(s)– wyciągnięcie wszystkich liczb całkowitych.czy_data_iso(s)– sprawdzenie formatu YYYY-MM-DD.znajdz_slowa_na_wielka(s)– słowa zaczynające się wielką literą.czy_poprawny_identyfikator(s)– walidacja identyfikatora Pythona (bezkeyword).
- Friedl, J. (2006). Mastering Regular Expressions, 3rd ed. O'Reilly. Rozdziały 1–2.
- Lutz, M. (2013). Learning Python, 5th ed. O'Reilly. Rozdział 36.
- re – Regular expression syntax (Python Docs)
- regex101.com – interaktywny tester z objaśnieniami
- regexr.com – alternatywny tester
