Python Regex magyarázata (2026)
A Regex a Python legféltettebb funkciója. Ez nem olyan nehéz – de az oktatóanyagok 80%-a előre tölti az elméletet (\d, \w, mohó vs lusta), mielőtt megmutatna egyetlen mintát, amelyet a valós kódban valóban használna. Ez az oktatóanyag ezt megfordítja.
Kitérünk a következőkre: a "re" modul alapjai, az öt minta, amelyek a valódi munka 90%-át lefedik, amikor a "re.compile" valóban segít, a csoportok elnevezése vs. számozott, és a négy eset, amikor a regex a ROSSZ eszköz.
A modul 60 másodperc alatt
Minden az stdlib re modulban él. Három funkció elégíti ki a legtöbb igényt:
Szabály: kétség esetén használja a "re.search" parancsot. re.match csak a kezdést ellenőrzi; ezt elfelejtve "nem egyezik a regexem!" 30 perc elveszett.
Nyers karakterláncok – mindig használja őket
r"..." előtag letiltja a fordított perjel értelmezését. Enélkül a "\d" "\\d" lesz a Pythonban, amit a regex motor "\d"-nek lát - ugyanaz az eredmény, de csak véletlenül, és csak a "\d"-re. A "\n" a regexben egy újsort jelent, nem pedig a két + n` karaktert.
Izommemória: minden regex literál "r"-vel kezdődik. Nincs kivétel.
Az 5 minta, amely a valódi munka 90%-át lefedi
1. Kivonja az összes egész számot a szövegből
Megjegyzés: A „199,99” a következőre oszlik: „['199”, „99”]” – a „\d+” nem húzza át a pontot. Használja az r"\d+(?:\.\d+)?" karaktert az opcionális tizedesjegyekhez:
2. Normalizálja a szóközt
A \s+ minden szóközök / tabulátor / újsorok futtatására alkalmas. Cserélje ki egyetlen szóközzel, vágja le a széleket. Ez a Python válasza a `sed -E 's/[[:space:]]+/ /g''-re.
3. Bontsa ki a gazdagépnevet egy URL-ből
A zárójelek rögzítési csoportot hoznak létre; A .group(1) visszaadja a tartalmát. [^/:]+ = "egy vagy több karakter, amely nem / vagy :" — megáll a portelválasztónál VAGY az elérési útnál.
Éles URL-elemzéshez használja az „urllib.parse.urlparse” paramétert (a szélső eseteket kezeli, például a userinfo + IPv6). A Regex a gyors és piszkos elszívásra szolgál.
4. Laza e-mail-ellenőrzés
NINCS reguláris kifejezés, amely teljes mértékben érvényesíti az e-maileket az RFC 5322 szerint. Bárki, aki mást mond, elad valamit. De ez a valódi címek 99%-át elkapja anélkül, hogy hamisan utasítaná el a jó címeket:
A horgonyok (^ és $) teljes karakterláncú egyezést kényszerítenek ki. Nélkülük a "foo@bar" egy nagyobb mondatban illene.
Gyártás: küldjön visszaigazoló e-mailt. Ez az EGYETLEN megbízható e-mail érvényesítő.
5. Elnevezett rögzítési csoportok
A számozott csoportok ((...) + .group(1)) megfelelőek 2-3 rögzítéshez. Ezen kívül a nevek nyernek:
A .groupdict() az összes megnevezett csoport dictjét adja vissza. Adjon hozzá / rendezzen át csoportokat anélkül, hogy feltörne minden hívási webhelyet, amely a `.group(3)-ra hivatkozott.
re.compile — amikor valóban segít
Az stdlib kis lefordított minta gyorsítótárat tart fenn (alapértelmezett méret 512), így az egyszeri "re.search(pattern, text)" hívások gyakorlatilag ingyenesek az első találat után. A "re.compile" kifejezetten segít, ha:
1. A mintát egy szűk hurkon belül használják (több millió gyufa).
2. A mintát modulszintű konstansként szeretné tárolni a grep-képességhez.
3. Szüksége van a .finditer(), .pattern, .flags-ra a lefordított objektumon.
Ne fordítsd túl. Minden modulszintű re.compile apró importidő költséggel jár.
Közös zászlók
Kombinálja a |-vel: re.IGNORECASE | re.MULTILINE.
Amikor a regex ROSSZ eszköz
1. HTML / XML elemzése → használjon valódi értelmezőt
A klasszikus Stack Overflow válasz 20 éves és még mindig igaz.
2. JSON elemzése → használja a `jsont'
A „json” modul kezeli a beágyazott idézőjeleket, a megtisztított karaktereket, a Unicode-kódot és minden RFC 8259 éles esetet. A Regex-elemző JSON egy mintaellenes jel.
3. Dátumok elemzése → használja a "dateutil" vagy a "datetime.strptime" parancsot
A dateutil.parser.parse("2026-07-30") minden formátumot elfogad, amelyet az ember beírhat. A datetime.strptime hatékonyan kezeli az ismert formátumokat. Mindkettő kezeli az időzónákat. A Regexnek újra fel kell találnia az egészet.
4. Beágyazott / rekurzív minták → használjon elemző generátort
Az egyező zárójelek, a beágyazott JSON, a kiegyensúlyozott kifejezések formálisan meghaladják a regex hatalmát (kontextusmentes nyelvtani terület). Használja a "pyparsing" / "lark" / "ANTLR" parancsot, vagy csak sétáljon a karakterláncon egy kis elemzővel.
Regex hibakeresés
Használja a regex101.com webhelyet (válassza a „Python” ízt). Illessze be a mintát + minta szöveget; valós időben kiemeli az egyezéseket, elmagyaráz minden metakaraktert, és megjeleníti a megnevezett csoportokat. A regex intuitív megtanulásának leggyorsabb módja.
A kódszintű hibakereséshez a "re.DEBUG" kiírja a lefordított állapotú gépet:
Gyakorolj
Írjon mindegyikhez egy reguláris kifejezést. Megoldások lent.
1. Vegye ki a verziószámot a "Python 3.13.2 (fő, 2026. január 15., 10:32:11)" verzióból – a "3.13.2" értéket kell visszaadnia.
2. Ossza fel az "alma, banán; cseresznye narancs" szót bármely határolóra (", ", ";" vagy szóköz).
3. Írja át a „foo.bar_baz-123” karakterláncot „FOO.BAR_BAZ-123”-ra (csak nagybetűk, hagyjon meg számokat és írásjeleket).
Megoldások:
A Regex szuperhatalom, ha túl vagy az első 10 mintán. A trükk az, hogy izommemóriát építsünk a fenti ötre – a valós munka 90%-át lefedik. Nyújtson valódi elemzőt abban a pillanatban, amikor azon kapja magát, hogy visszahivatkozásokat ír, hogy kiegyensúlyozza a zárójeleket.
Következő lépés: regex + szövegfeldolgozási leckék az automatizálási pályán – gyakoroljon naplófájlokat, CSV-adatokat és webes lemásolási feladatokat valódi Python futtatásával a böngészőben.