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:
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`.
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
Napomena 199.99 dijeli se na ['199', '99'] — \d+ ne prelazi točku. Koristite r"\d+(?:\.\d+)?" za neobavezne decimale:
2. Normalizirajte razmak
\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
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:
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:
.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
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
Kombinirajte s |: re.IGNORECASE | re.MULTILINE.
Kada je regex POGREŠAN alat
1. Raščlanjivanje HTML / XML → koristite pravi parser
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:
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:
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.