Python Regex erklärt (2026)
Regex ist die am meisten gefürchtete Funktion von Python. Es ist nicht so schwer – aber 80 % der Tutorials laden die Theorie vor („\d“, „\w“, „gierig“ vs. „faul“), bevor sie Ihnen ein einzelnes Muster zeigen, das Sie tatsächlich in echtem Code verwenden würden. Dieses Tutorial dreht das um.
Wir behandeln: die Grundlagen des „re“-Moduls, die fünf Muster, die 90 % der tatsächlichen Arbeit abdecken, wann „re.compile“ tatsächlich hilft, benannte Gruppen vs. nummerierte Gruppen und die vier Fälle, in denen Regex das FALSCHE Werkzeug ist.
Das Modul in 60 Sekunden
Alles befindet sich im stdlib-Modul „re“. Drei Funktionen decken die meisten Bedürfnisse ab:
Regel: Im Zweifelsfall „re.search“ verwenden. re.match prüft nur den Start; Wenn man das vergisst, kommt es zu „Mein regulärer Ausdruck stimmt nicht überein!“ 30 Minuten verloren.
Rohe Strings – verwenden Sie sie immer
Das Präfix „r“…“ deaktiviert die Backslash-Interpretation. Ohne sie wird „\d“ in Python zu „\\d“, was die Regex-Engine als „\d“ sieht – dasselbe Ergebnis, aber nur durch Zufall und nur für „\d“. „\n“ in einem regulären Ausdruck ist eine neue Zeile, nicht die beiden Zeichen „+ „n“.
Muskelgedächtnis: Jedes Regex-Literal beginnt mit „r“. Keine Ausnahmen.
Die 5 Muster, die 90 % der echten Arbeit abdecken
1. Extrahieren Sie alle Ganzzahlen aus dem Text
Beachten Sie, dass „199.99“ in „[‘199‘, ‚99‘]“ aufgeteilt wird – „\d+“ überschreitet den Punkt nicht. Verwenden Sie „r"\d+(?:\.\d+)?"` für optionale Dezimalzahlen:
2. Leerzeichen normalisieren
„\s+“ entspricht jeder Reihe von Leerzeichen/Tabulatoren/Zeilenumbrüchen. Ersetzen Sie es durch ein einzelnes Leerzeichen und entfernen Sie die Kanten. Dies ist Pythons Antwort auf „sed -E 's/[[:space:]]+/ /g“.
3. Extrahieren Sie den Hostnamen aus einer URL
Die Klammern erstellen eine Erfassungsgruppe. .group(1) gibt seinen Inhalt zurück. „[^/:]+` = „ein oder mehrere Zeichen, die nicht „/“ oder „:“ sind“ – stoppt am Porttrennzeichen ODER am Pfad.
Für das Parsen von Produktions-URLs verwenden Sie „urllib.parse.urlparse“ (behandelt Randfälle wie Benutzerinfo + IPv6). Regex dient der schnellen Extraktion.
4. Lose E-Mail-Validierung
Es gibt KEINEN regulären Ausdruck, der E-Mails gemäß RFC 5322 vollständig validiert. Jeder, der Ihnen etwas anderes sagt, verkauft etwas. Aber dieser hier fängt 99 % der echten Adressen ein, ohne gute Adressen fälschlicherweise abzulehnen:
Anker („^“ und „$“) erzwingen die Übereinstimmung mit der gesamten Zeichenfolge. Ohne sie würde „foo@bar“ in einem größeren Satz übereinstimmen.
Produktion: Senden Sie eine Bestätigungs-E-Mail. Das ist der EINZIGE zuverlässige E-Mail-Validator.
5. Benannte Erfassungsgruppen
Nummerierte Gruppen („(...)“ + „.group(1)“ sind für 2-3 Aufnahmen geeignet. Darüber hinaus gewinnen Namen:
.groupdict() gibt ein Diktat aller benannten Gruppen zurück. Gruppen hinzufügen/neu anordnen, ohne jede Aufrufseite zu unterbrechen, die auf „.group(3)“ verweist.
„re.compile“ – wenn es tatsächlich hilft
Die stdlib verwaltet einen kleinen Cache für kompilierte Muster (Standardgröße 512), sodass einmalige „re.search(pattern, text)“-Aufrufe nach dem ersten Treffer praktisch kostenlos sind. „re.compile“ hilft explizit, wenn:
1. Das Muster wird in einer engen Schleife (Millionen Übereinstimmungen) verwendet.
2. Sie möchten das Muster zur grep-Fähigkeit als Konstante auf Modulebene speichern.
3. Sie benötigen „.finditer()“, „.pattern“, „.flags“ für das kompilierte Objekt.
Überkompilieren Sie nicht. Jedes „re.compile“ auf Modulebene verursacht geringfügige Importzeitkosten.
Gemeinsame Flaggen
Kombinieren Sie mit |: re.IGNORECASE | re.MULTILINE.
Wenn Regex das FALSCHE Werkzeug ist
1. HTML/XML analysieren → einen echten Parser verwenden
Die klassische Stack-Overflow-Antwort hierfür ist 20 Jahre alt und immer noch wahr.
2. JSON analysieren → „json“ verwenden
Das Modul „json“ verarbeitet verschachtelte Anführungszeichen, Escape-Zeichen, Unicode und alle RFC 8259-Randfälle. Regex-Parsing-JSON ist ein Anti-Pattern-Signal.
3. Daten analysieren → verwenden Sie „dateutil“ oder „datetime.strptime“.
dateutil.parser.parse("2026-07-30") akzeptiert jedes Format, das ein Mensch eingeben könnte. „datetime.strptime“ verarbeitet bekannte Formate effizient. Beide verarbeiten Zeitzonen. Regex müsste alles neu erfinden.
4. Verschachtelte/rekursive Muster → Verwenden Sie einen Parser-Generator
Matched-Parens, verschachtelte JSON-Ausdrücke und ausgewogene Ausdrücke liegen formal außerhalb der Macht von Regex (kontextfreies Grammatikgebiet). Verwenden Sie „pyparsing“ / „lark“ / „ANTLR“ – oder durchlaufen Sie einfach die Zeichenfolge mit einem kleinen Parser.
Regex debuggen
Verwenden Sie regex101.com (wählen Sie die Variante „Python“). Fügen Sie das Muster und den Beispieltext ein. Es hebt Übereinstimmungen in Echtzeit hervor, erklärt jedes Metazeichen und zeigt benannte Gruppen an. Der schnellste Weg, Regex intuitiv zu lernen.
Für das Debuggen auf Codeebene gibt „re.DEBUG“ die kompilierte Zustandsmaschine aus:
Üben
Schreiben Sie für jeden einen regulären Ausdruck. Lösungen unten.
1. Extrahieren Sie die Versionsnummer aus „Python 3.13.2 (main, 15. Januar 2026, 10:32:11)“ – sollte „3.13.2“ zurückgeben.
2. Teilen Sie „Apfel,Banane; Kirschorange“ durch ein beliebiges Trennzeichen (,, ; oder Leerzeichen) auf.
3. Schreiben Sie „foo.bar_baz-123“ in „FOO.BAR_BAZ-123“ um (nur Großbuchstaben, Ziffern und Satzzeichen belassen).
Lösungen:
Regex ist eine Supermacht, sobald Sie die ersten 10 Muster überschritten haben. Der Trick besteht darin, das Muskelgedächtnis auf den fünf oben genannten aufzubauen – sie decken 90 % der tatsächlichen Arbeit ab. Greifen Sie zu einem echten Parser, sobald Sie Rückverweise schreiben, um Parens auszugleichen.
Nächster Schritt: Regex + Textverarbeitungslektionen im Bereich „Automatisierung“ – Üben Sie Protokolldateien, CSV-Daten und Web-Scraping-Aufgaben mit echtem Python, das in Ihrem Browser ausgeführt wird.