re
Wyrażenia regularne: wyszukiwanie, sprawdzanie i zamiana fragmentów tekstu według wzorca.
- Zwraca
search()ifullmatch()zwracająMatchalboNone,findall()listę, asub()nowy napis.
Przykład
#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"))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
#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 napisr"...".string
str
Przeszukiwany tekst.repl
str lub funkcja
Wre.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
#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")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))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 wyniksearch()nie jestNone. W przeciwnym razie dostanieszAttributeError.
Powiązane hasła
#- str.replace()Zwraca napis z zamienionymi wystąpieniami podanego fragmentu.
- str.split()Dzieli napis na listę części według separatora.
- str.find()Zwraca indeks pierwszego wystąpienia fragmentu albo -1.
- str.isdigit()Sprawdza, czy napis składa się wyłącznie z cyfr.
- str.startswith()Sprawdza, czy napis zaczyna się od podanego fragmentu.
Widzisz błąd albo brakuje przykładu? Napisz do nas.