Sari la conținutul principal
Python intermediar2026-07-31 · 11 min de citit

Python Regex Explained (2026)

Regex este cea mai de temut caracteristică a lui Python. Nu este atât de greu – dar 80% dintre tutoriale încărcează teoria (\d, \w, lacom vs leneș) înainte de a vă arăta un singur model pe care l-ați folosi de fapt în codul real. Acest tutorial inversează asta.

Vom acoperi: elementele de bază ale modulului re, cele cinci modele care acoperă 90% din munca reală, când re.compile ajută de fapt, grupurile numite vs numerotate și cele patru cazuri în care regex este instrumentul GREȘIT.

Modulul în 60 de secunde

Totul trăiește în modulul stdlib re. Trei funcții acoperă majoritatea nevoilor:

▶ PYTHONeditable · runs in your browser

Regulă: folosiți re.search atunci când aveți îndoieli. re.match verifică doar începutul; uitând asta duce la „reexexul meu regex nu se potrivește!” 30 de minute pierdute.

Corzi brute — folosește-le întotdeauna

Prefixul r"... dezactivează interpretarea backslash. Fără el, "\d" devine "\\d" în Python, pe care motorul regex îl vede ca \d — același rezultat, dar numai accidental și numai pentru \d. "\n" într-un regex este o linie nouă, nu cele două caractere ` + n`.

▶ PYTHONeditable · runs in your browser

Memoria musculară: fiecare literal regex începe cu r. Fără excepții.

Cele 5 modele care acoperă 90% din munca reală

1. Extrage toate numerele întregi din text

▶ PYTHONeditable · runs in your browser

Rețineți că 199.99 se împarte în ['199', '99'] — \d+ nu încrucișează punctul. Folosiți r"\d+(?:\.\d+)?" pentru zecimale opționale:

▶ PYTHONeditable · runs in your browser

2. Normalizați spațiul alb

▶ PYTHONeditable · runs in your browser

\s+ se potrivește cu orice rulare de spații / file / linii noi. Înlocuiți cu un singur spațiu, îndepărtați marginile. Acesta este răspunsul lui Python la sed -E 's/[[:space:]]+/ /g'.

3. Extrageți numele gazdei dintr-o adresă URL

▶ PYTHONeditable · runs in your browser

Parantezele creează un grup de captură; .group(1) returnează conținutul său. [^/:]+ = „unul sau mai multe caractere care nu sunt / sau :” — se oprește la separatorul de porturi SAU la cale.

Pentru analiza URL de producție, utilizați urllib.parse.urlparse (se ocupă de cazurile marginale, cum ar fi userinfo + IPv6). Regex este pentru extragerea rapidă și murdară.

4. Validare liberă de e-mail

Nu există expresii regex care să valideze complet e-mailurile conform RFC 5322. Oricine vă spune altfel vinde ceva. Dar aceasta prinde 99% din adresele reale fără a le respinge fals pe cele bune:

▶ PYTHONeditable · runs in your browser

Ancorele (^ și $) forțează potrivirea întregului șir. Fără ele, "foo@bar" dintr-o propoziție mai mare s-ar potrivi.

Producție: trimiteți un e-mail de confirmare. Acesta este SINGURUL validator de e-mail de încredere.

5. Grupuri de captură denumite

Grupurile numerotate ((...) + .group(1)) sunt bune pentru 2-3 capturi. Dincolo de asta, numele câștigă:

▶ PYTHONeditable · runs in your browser

.groupdict() returnează un dict al tuturor grupurilor numite. Adăugați/reordonați grupuri fără a întrerupe fiecare site de apel care se referă la .group(3).

re.compile — când chiar ajută

▶ PYTHONeditable · runs in your browser

Stdlib menține un mic cache cu modele compilate (dimensiunea implicită 512), astfel încât apelurile unice „re.search(pattern, text)” sunt efectiv libere după prima lovitură. re.compile ajută în mod explicit când:

1. Modelul este folosit în interiorul unei bucle strânse (milioane de potriviri).

2. Doriți să stocați modelul ca o constantă la nivel de modul pentru grep-ability.

3. Aveți nevoie de .finditer(), .pattern, .flags pe obiectul compilat.

Nu supracompilați. Fiecare re.compile la nivel de modul adaugă un cost mic de timp de import.

Steaguri comune

▶ PYTHONeditable · runs in your browser

Combinați cu |: re.IGNORECASE | re.MULTILINE.

Când regex este instrumentul GREȘIT

1. Analizarea HTML / XML → utilizați un parser real

▶ PYTHONeditable · runs in your browser

Răspunsul clasic Stack Overflow pentru aceasta are 20 de ani și încă este adevărat.

2. Analizarea JSON → utilizați json

Modulul json se ocupă de ghilimele imbricate, caracterele escape, Unicode și fiecare caz marginal RFC 8259. Regex-parsing JSON este un semnal anti-model.

3. Analizarea datelor → utilizați dateutil sau datetime.strptime

dateutil.parser.parse("2026-07-30") acceptă fiecare format pe care un om îl poate introduce. datetime.strptime gestionează eficient formatele cunoscute. Ambele se ocupă de fusurile orare. Regex ar trebui să reinventeze totul.

4. Modele imbricate / recursive → utilizați un generator de analiză

Parenți potriviți, JSON imbricat, expresii echilibrate sunt în mod formal dincolo de puterea regex-ului (teritoriu de gramatică fără context). Utilizați pyparsing / lark / ANTLR — sau pur și simplu parcurgeți șirul cu un mic parser.

Depanare regex

Folosiți regex101.com (alegeți aroma „Python”). Lipiți modelul + exemplu de text; evidențiază potrivirile în timp real, explică fiecare metacaracter și arată grupurile numite. Cel mai rapid mod de a învăța intuitiv regex.

Pentru depanarea la nivel de cod, re.DEBUG tipărește mașina de stare compilată:

▶ PYTHONeditable · runs in your browser

Practică

Scrieți un regex pentru fiecare. Soluții de mai jos.

1. Extrageți numărul versiunii din "Python 3.13.2 (principal, 15 ianuarie 2026, 10:32:11)" — ar trebui să returneze "3.13.2".

2. Împărțiți „„măr, banană; portocală cireșă”” pe orice delimitator (,, ; sau spațiu).

3. Rescrieți foo.bar_baz-123 ca FOO.BAR_BAZ-123 (numai cu litere mari, lăsați cifre și semne de punctuație).

Soluții:

▶ PYTHONeditable · runs in your browser

Regex este o superputere odată ce depășiți primele 10 modele. Trucul este să construiți memoria musculară pe cele cinci de mai sus - acopera 90% din munca reală. Ajungeți la un analizator real în momentul în care vă treziți să scrieți referințe pentru a echilibra părinții.

Următorul pas: regex + lecții de procesare a textului în pista Automatizare — exersați pe fișierele jurnal, datele CSV și sarcinile de web-scraping cu Python real care rulează în browser.

Ești gata să-l încerci?

15 lecții gratuite după o înscriere gratuită — fără card. Eșantionați platforma, apoi decideți.

Începe gratuit →

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.