Przejdź do treści głównej
Średnio zaawansowany Python2026-07-31 · 11 min czytania

Wyjaśnienie wyrażenia regularnego w języku Python (2026)

Regex to najbardziej przerażająca funkcja Pythona. Nie jest to takie trudne — ale 80% samouczków ładuje teorię od początku (\d, \w, zachłanny vs leniwy), zanim pokaże ci pojedynczy wzorzec, którego faktycznie użyłbyś w prawdziwym kodzie. Ten samouczek to odwraca.

Omówimy: podstawy modułu „re”, pięć wzorców pokrywających 90% rzeczywistej pracy, kiedy „re.compile” faktycznie pomaga, grupy nazwane a numerowane oraz cztery przypadki, w których wyrażenie regularne jest ZŁYM narzędziem.

Moduł w 60 sekund

Wszystko znajduje się w module stdlib re. Trzy funkcje zaspokajają większość potrzeb:

▶ PYTHONeditable · runs in your browser

Reguła: w razie wątpliwości użyj opcji „re.search”. re.match sprawdza tylko początek; zapomnienie o tym prowadzi do „moje wyrażenie regularne nie pasuje!” Stracone 30 minut.

Surowe ciągi znaków — zawsze ich używaj

Przedrostek r"..." wyłącza interpretację ukośnika odwrotnego. Bez tego "\d" staje się "\\d" w Pythonie, co silnik regex widzi jako \d — ten sam wynik, ale tylko przez przypadek i tylko dla \d. "\n" w wyrażeniu regularnym oznacza nową linię, a nie dwa znaki ` + n`.

▶ PYTHONeditable · runs in your browser

Pamięć mięśniowa: każdy literał wyrażenia regularnego zaczyna się od „r”. Żadnych wyjątków.

5 wzorców, które pokrywają 90% prawdziwej pracy

1. Wyodrębnij wszystkie liczby całkowite z tekstu

▶ PYTHONeditable · runs in your browser

Uwaga 199,99 dzieli się na ['199', '99'] — \d+ nie przecina kropki. Użyj r"\d+(?:\.\d+)?" dla opcjonalnych miejsc dziesiętnych:

▶ PYTHONeditable · runs in your browser

2. Normalizuj białe znaki

▶ PYTHONeditable · runs in your browser

\s+ dopasowuje dowolny ciąg spacji/tabulacji/nowej linii. Zastąp pojedynczą spacją, usuń krawędzie. To jest odpowiedź Pythona na sed -E 's/[[:space:]]+/ /g'.

3. Wyodrębnij nazwę hosta z adresu URL

▶ PYTHONeditable · runs in your browser

Nawiasy tworzą grupę przechwytywania; .group(1) zwraca jego zawartość. [^/:]+ = "jeden lub więcej znaków innych niż / lub :" — zatrzymuje się na separatorze portu LUB ścieżce.

Do produkcyjnego analizowania adresów URL użyj urllib.parse.urlparse (obsługuje przypadki brzegowe, takie jak informacje o użytkowniku + IPv6). Regex służy do szybkiej i brudnej ekstrakcji.

4. Luźna weryfikacja adresu e-mail

NIE ma wyrażenia regularnego, które w pełni sprawdza wiadomości e-mail zgodnie z RFC 5322. Każdy, kto twierdzi inaczej, coś sprzedaje. Ale ten przechwytuje 99% prawdziwych adresów bez fałszywego odrzucania dobrych:

▶ PYTHONeditable · runs in your browser

Kotwice (^ i $) wymuszają dopasowanie pełnego łańcucha. Bez nich pasowałoby „foo@bar” w większym zdaniu.

Produkcja: wyślij e-mail z potwierdzeniem. To JEDYNY niezawodny weryfikator poczty e-mail.

5. Nazwane grupy przechwytujące

Numerowane grupy ((...) + .group(1)) wystarczą na 2-3 przechwytywania. Poza tym wygrywają imiona:

▶ PYTHONeditable · runs in your browser

.groupdict() zwraca dykt wszystkich nazwanych grup. Dodawaj/zmieniaj kolejność grup bez przerywania każdej witryny wywołań, która odwołuje się do .group(3).

re.compile — kiedy to faktycznie pomaga

▶ PYTHONeditable · runs in your browser

Biblioteka stdlib przechowuje małą pamięć podręczną ze skompilowanymi wzorami (domyślny rozmiar 512), więc jednorazowe wywołania re.search(pattern, tekst) są faktycznie bezpłatne po pierwszym trafieniu. re.compile wyraźnie pomaga, gdy:

1. Wzór jest używany w ciasnej pętli (miliony dopasowań).

2. Chcesz zapisać wzorzec jako stałą na poziomie modułu dla możliwości grep.

3. Potrzebujesz .finditer(), .pattern, .flags na skompilowanym obiekcie.

Nie przekompiluj. Każde polecenie „re.compile” na poziomie modułu dodaje niewielki koszt czasu importu.

Wspólne flagi

▶ PYTHONeditable · runs in your browser

Połącz z |: re.IGNORECASE | re.MULTILINE.

Gdy wyrażenie regularne jest ZŁYM narzędziem

1. Parsowanie HTML / XML → użyj prawdziwego parsera

▶ PYTHONeditable · runs in your browser

Klasyczna odpowiedź na to Stack Overflow ma 20 lat i nadal jest prawdziwa.

2. Parsowanie JSON → użyj json

Moduł json obsługuje zagnieżdżone cudzysłowy, znaki ucieczki, Unicode i każdy przypadek brzegowy RFC 8259. JSON analizujący wyrażenie regularne jest sygnałem antywzorcowym.

3. Analizowanie dat → użyj dateutil lub datetime.strptime

dateutil.parser.parse("2026-07-30") akceptuje każdy format, jaki może wpisać człowiek. datetime.strptime efektywnie obsługuje znane formaty. Obydwa obsługują strefy czasowe. Regex musiałby to wszystko wymyślić na nowo.

4. Wzorce zagnieżdżone/rekurencyjne → użyj generatora parsera

Dopasowane pareny, zagnieżdżone JSON i zrównoważone wyrażenia są formalnie poza zasięgiem wyrażenia regularnego (terytorium gramatyki bezkontekstowej). Użyj pyparsing / lark / ANTLR — lub po prostu przejdź po łańcuchu za pomocą małego parsera.

Debugowanie wyrażenia regularnego

Użyj regex101.com (wybierz smak „Python”). Wklej wzór + przykładowy tekst; podkreśla dopasowania w czasie rzeczywistym, wyjaśnia każdy metaznak i pokazuje nazwane grupy. Najszybszy sposób na intuicyjną naukę wyrażeń regularnych.

W przypadku debugowania na poziomie kodu re.DEBUG wypisuje skompilowaną maszynę stanu:

▶ PYTHONeditable · runs in your browser

Ćwicz

Napisz wyrażenie regularne dla każdego. Rozwiązania poniżej.

1. Wyodrębnij numer wersji z `Python 3.13.2 (main, 15 stycznia 2026, 10:32:11)" — powinien zwrócić ``3.13.2''.

2. Podziel `jabłko,banan;wiśniowa pomarańcza' na dowolnym ograniczniku (,, ; lub spacja).

3. Przepisz foo.bar_baz-123 na FOO.BAR_BAZ-123 (tylko wielkie litery, zostaw cyfry i znaki interpunkcyjne).

Rozwiązania:

▶ PYTHONeditable · runs in your browser

Regex staje się supermocą, gdy przekroczysz pierwsze 10 wzorców. Sztuka polega na budowaniu pamięci mięśniowej na pięciu powyższych – pokrywają one 90% prawdziwej pracy. Sięgnij po prawdziwy parser, gdy tylko zauważysz, że piszesz odniesienia wsteczne, aby zrównoważyć parery.

Następny krok: lekcje wyrażeń regularnych + przetwarzania tekstu na ścieżce Automation — ćwicz pliki dziennika, dane CSV i zadania przeglądania stron internetowych, korzystając z prawdziwego języka Python działającego w przeglądarce.

Gotowy, aby spróbować?

15 lekcji gratis po darmowej rejestracji – bez karty. Wypróbuj platformę i podejmij decyzję.

Zacznij bezpłatnie →

Or unlock every lesson

Pro — $12/mo, unlimited AI, cancel any time. Refund within 14 days worldwide.

See Pro plans →

Get one Python lesson + one career idea every Friday

No spam, no "buy our course now". Three bullets, every Friday. Unsubscribe with one click.