re

Wyrażenia regularne: wyszukiwanie, sprawdzanie i zamiana fragmentów tekstu według wzorca.

Zwraca
search() i fullmatch() zwracają Match albo None, findall() listę, a sub() nowy napis.
Na tej stronie

Przykład

#
Python
import re

text = "Zadania 1_4 i 1_12 oddaj do 2026-10-05, a zadanie 2_1 do 2026-10-12."

print(re.findall(r"\d+_\d+", text))

match = re.search(r"(\d{4})-(\d{2})-(\d{2})", text)
print(match.group(), match.group(2))

print(re.sub(r"\s+", " ", "Za   dużo    spacji"))
Wynikzapisany wynik, możesz go sprawdzić
['1_4', '1_12', '2_1']
2026-10-05 10
Za dużo spacji

Definicja i zastosowanie

#

Moduł re obsługuje wyrażenia regularne, czyli wzorce opisujące tekst. \d oznacza cyfrę, \s biały znak, \w literę, cyfrę lub podkreślnik, [A-Z] wielką literę z podanego zakresu, a + powtórzenie poprzedniego elementu co najmniej raz. Z takich klocków zbudujesz wzorzec daty, numeru zadania czy adresu e-mail.

Najważniejsze funkcje to re.search() (pierwsze dopasowanie w dowolnym miejscu tekstu), re.fullmatch() (czy cały tekst pasuje do wzorca), re.findall() (lista wszystkich dopasowań), re.sub() (zamiana) i re.split() (dzielenie). search() i fullmatch() zwracają obiekt Match albo None, gdy nic nie pasuje.

Wzorce zapisuj jako surowe napisy z przedrostkiem r, np. r"\d+", żeby Python nie interpretował ukośników wstecznych po swojemu. Nawiasy okrągłe tworzą grupy, których zawartość odczytasz metodą group(). Wzorzec używany wiele razy możesz skompilować przez re.compile().

Składnia

#
Składnia
import re

re.search(pattern, string, flags=0)
re.fullmatch(pattern, string)
re.findall(pattern, string)
re.sub(pattern, repl, string)
re.split(pattern, string)

Parametry

#
  • pattern

    str

    Wzorzec wyrażenia regularnego, najlepiej jako surowy napis r"...".
  • string

    str

    Przeszukiwany tekst.
  • repl

    str lub funkcja

    W re.sub(): tekst wstawiany w miejsce dopasowania albo funkcja, która go wylicza.
  • flags

    opcjonalny

    Modyfikatory, np. re.IGNORECASE (bez rozróżniania wielkości liter).

Więcej przykładów

#
Walidacja i grupy nazwane
Python
import re

pattern = re.compile(r"(?P<user>[\w.]+)@(?P<domain>[\w-]+\.\w+)")

for email in ["ania.nowak@codeworlds.pl", "kuba@", "ola@szkola.edu"]:
    match = pattern.fullmatch(email)
    print(email, "->", match["domain"] if match else "niepoprawny")
Wynikzapisany wynik, możesz go sprawdzić
ania.nowak@codeworlds.pl -> codeworlds.pl
kuba@ -> niepoprawny
ola@szkola.edu -> szkola.edu
Dzielenie, flagi i zamiana z funkcją
Python
import re

text = "Python, HTML;CSS  python"
print(re.split(r"[,;\s]+", text))
print(re.findall(r"python", text, flags=re.IGNORECASE))

prices = "HTML 49 zł, Python 79 zł"
print(re.sub(r"\d+", lambda m: str(int(m.group()) * 2), prices))
Wynikzapisany wynik, możesz go sprawdzić
['Python', 'HTML', 'CSS', 'python']
['Python', 'python']
HTML 98 zł, Python 158 zł

Dobre praktyki

#
  • Zawsze używaj surowych napisów r"..." dla wzorców. Bez nich "\b" oznacza znak cofania, a nie granicę słowa.
  • Gdy wzorzec zawiera grupy, findall() zwraca zawartość grup zamiast całych dopasowań. Grupę, której nie chcesz zwracać, zapisz jako (?:...).
  • Zanim wywołasz group(), sprawdź, czy wynik search() nie jest None. W przeciwnym razie dostaniesz AttributeError.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.