Preskoči na glavni sadržaj
Srednji Python2026-07-31 · 11 min čitanja

Objašnjenje Python Regex (2026)

Regex je Pythonova značajka koje se najviše plaše. Nije tako teško — ali 80% vodiča učitava teoriju (\d, \w, pohlepan vs lijen) prije nego što vam pokaže jedan uzorak koji biste zapravo koristili u stvarnom kodu. Ovaj tutorial to mijenja.

Pokrit ćemo: osnove modula re, pet uzoraka koji pokrivaju 90% stvarnog posla, kada re.compile zapravo pomaže, imenovane grupe naspram numeriranih i četiri slučaja u kojima je regex POGREŠAN alat.

Modul za 60 sekundi

Sve živi u stdlib re modulu. Tri funkcije pokrivaju većinu potreba:

▶ PYTHONeditable · runs in your browser

Pravilo: koristite re.search kada ste u nedoumici. re.match provjerava samo početak; zaboravljanje toga dovodi do "moj regularni izraz ne odgovara!" Izgubljeno 30 minuta.

Neobrađeni nizovi — uvijek ih koristite

r"..." prefiks onemogućuje tumačenje obrnute kose crte. Bez toga, "\d" postaje "\\d" u Pythonu, što mehanizam za regex vidi kao \d — isti rezultat, ali samo slučajno i samo za \d. "\n" u regularnom izrazu je novi red, a ne dva znaka ` + n`.

▶ PYTHONeditable · runs in your browser

Mišićna memorija: svaki regularni literal počinje s r. Nema izuzetaka.

5 uzoraka koji pokrivaju 90% stvarnog posla

1. Ekstrahirajte sve cijele brojeve iz teksta

▶ PYTHONeditable · runs in your browser

Napomena 199.99 dijeli se na ['199', '99'] — \d+ ne prelazi točku. Koristite r"\d+(?:\.\d+)?" za neobavezne decimale:

▶ PYTHONeditable · runs in your browser

2. Normalizirajte razmak

▶ PYTHONeditable · runs in your browser

\s+ odgovara bilo kojem nizu razmaka/tabulatora/novih redaka. Zamijenite s jednim razmakom, skinite rubove. Ovo je Pythonov odgovor na sed -E 's/[[:space:]]+/ /g'.

3. Izdvojite naziv hosta iz URL-a

▶ PYTHONeditable · runs in your browser

Zagrade stvaraju grupu za snimanje; .group(1) vraća njegov sadržaj. [^/:]+ = "jedan ili više znakova koji nisu / ili :" — zaustavlja se na separatoru porta ILI putanji.

Za raščlanjivanje produkcijskog URL-a koristite urllib.parse.urlparse (rukuje rubne slučajeve kao što su userinfo + IPv6). Regex je za brzo i prljavo izdvajanje.

4. Loša provjera valjanosti e-pošte

NE POSTOJI regularni izraz koji u potpunosti potvrđuje e-poštu prema RFC 5322. Svatko tko vam kaže drugačije nešto prodaje. Ali ovaj hvata 99% pravih adresa bez lažnog odbijanja dobrih:

▶ PYTHONeditable · runs in your browser

Sidra (^ i $) forsiraju podudaranje cijelog niza. Bez njih, "foo@bar" unutar veće rečenice bi odgovarao.

Proizvodnja: pošaljite potvrdni e-mail. To je JEDINI pouzdan validator e-pošte.

5. Imenovane grupe za hvatanje

Numerirane grupe ((...) + .group(1)) su dobre za 2-3 snimanja. Osim toga, imena osvajaju:

▶ PYTHONeditable · runs in your browser

.groupdict() vraća diktat svih imenovanih grupa. Dodajte/promijenite redoslijed grupa bez prekidanja svakog mjesta poziva koje se odnosilo na .group(3).

re.compile — kada stvarno pomaže

▶ PYTHONeditable · runs in your browser

Stdlib održava malu predmemoriju kompajliranog uzorka (zadana veličina 512), tako da su jednokratni pozivi re.search(pattern, text) efektivno besplatni nakon prvog pogotka. re.compile eksplicitno pomaže kada:

1. Uzorak se koristi unutar uske petlje (milijuni šibica).

2. Želite pohraniti uzorak kao konstantu na razini modula za grep-sposobnost.

3. Trebate .finditer(), .pattern, .flags na kompiliranom objektu.

Nemojte pretjerano kompajlirati. Svaki re.compile na razini modula dodaje mali trošak vremena uvoza.

Uobičajene zastave

▶ PYTHONeditable · runs in your browser

Kombinirajte s |: re.IGNORECASE | re.MULTILINE.

Kada je regex POGREŠAN alat

1. Raščlanjivanje HTML / XML → koristite pravi parser

▶ PYTHONeditable · runs in your browser

Klasični odgovor Stack Overflowa za ovo star je 20 godina i još uvijek vrijedi.

2. Raščlanjivanje JSON-a → koristite json

Modul json obrađuje ugniježđene navodnike, izbjegnute znakove, Unicode i sve RFC 8259 rubne slučajeve. Raščlanjivanje regularnih izraza JSON signal je protiv uzorka.

3. Raščlanjivanje datuma → koristite dateutil ili datetime.strptime

dateutil.parser.parse("2026-07-30") prihvaća svaki format koji čovjek može upisati. datetime.strptime učinkovito obrađuje poznate formate. Oba rukuju vremenskim zonama. Regex bi trebao sve to ponovno izmisliti.

4. Ugniježđeni / rekurzivni uzorci → koristite generator parsera

Podudaranje zagrada, ugniježđeni JSON, uravnoteženi izrazi formalno su izvan moći regularnog izraza (gramatičko područje bez konteksta). Upotrijebite pyparsing / lark / ANTLR — ili jednostavno hodajte po nizu s malim parserom.

Otklanjanje pogrešaka regularnog izraza

Koristite regex101.com (odaberite okus "Python"). Zalijepite uzorak + uzorak teksta; ističe podudaranja u stvarnom vremenu, objašnjava svaki metakarakter i prikazuje imenovane grupe. Najbrži način da intuitivno naučite regex.

Za otklanjanje pogrešaka na razini koda, re.DEBUG ispisuje kompilirani stroj stanja:

▶ PYTHONeditable · runs in your browser

Vježbajte

Napišite regularni izraz za svaki. Rješenja ispod.

1. Ekstrahirajte broj verzije iz "Python 3.13.2 (main, Jan 15 2026, 10:32:11)" — trebalo bi vratiti "3.13.2".

2. Podijelite "apple,banana; cherry orange" na bilo koji graničnik (,, ; ili razmak).

3. Prepišite foo.bar_baz-123 kao FOO.BAR_BAZ-123 (samo velika slova, ostavite znamenke i interpunkcijske znakove).

Rješenja:

▶ PYTHONeditable · runs in your browser

Regex je supermoć kada prijeđete prvih 10 uzoraka. Trik je u izgradnji mišićne memorije na pet gore navedenih — oni pokrivaju 90% stvarnog posla. Posegnite za pravim parserom čim se nađete kako pišete povratne reference kako biste uravnotežili zagrade.

Sljedeći korak: regex + lekcije obrade teksta u stazi automatizacije — vježbajte na datotekama dnevnika, CSV podacima i zadacima scrapinga s weba uz pravi Python koji radi u vašem pregledniku.

Jeste li spremni isprobati?

15 besplatne lekcije nakon besplatne prijave — bez kartice. Isprobajte platformu, a zatim odlučite.

Počni besplatno →

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.