Python-Kurs / Reguläre Ausdrücke mit re suchen und Eingaben prüfen
Reguläre Ausdrücke suchen wiederkehrende Textmuster oder prüfen, ob eine ganze Zeichenfolge einem Format entspricht. Verwenden Sie dafür das Python-Modul re, trennen Sie aber die Musterprüfung von der fachlichen Prüfung: Ein Text kann wie ein Datum aussehen und trotzdem keinen gültigen Kalendertag bezeichnen.
Zwischen Suchen, Gesamtprüfung und mehreren Treffern wählen
| Aufgabe | Geeignete Operation | Ergebnis |
|---|---|---|
| Einen passenden Ausschnitt irgendwo finden | re.search |
Erster Treffer oder None |
| Den gesamten Eingabewert prüfen | re.fullmatch |
Treffer nur bei vollständiger Übereinstimmung |
| Mehrere Ausschnitte nacheinander auswerten | re.finditer |
Iterator mit Trefferobjekten und Positionen |
Für ein Formular mit genau einer Kennung und einem Betrag ist eine Gesamtprüfung sinnvoll. Beim Durchsuchen eines längeren Textes sollen dagegen möglicherweise mehrere eingebettete Paare gefunden werden. Legen Sie diesen Unterschied vor dem Schreiben des Musters fest: Ein gefundener Ausschnitt beweist nicht, dass die gesamte Eingabe zulässig ist.
Im folgenden Muster bedeutet [A-Z] genau einen lateinischen Großbuchstaben, [0-9]{3} genau drei Ziffern und [0-9]+ mindestens eine Ziffer. Der Doppelpunkt trennt die Felder. Die Schreibweise r"..." erzeugt eine rohe Python-Zeichenfolge und erleichtert den Umgang mit Rückstrichen. Sie hebt die Python-Syntax jedoch nicht auf; eine rohe Zeichenfolge kann beispielsweise nicht mit einer einzelnen ungeschützten Rückstrich-Endung abgeschlossen werden.
Benannte Felder auslesen und ein Datum einlesen
Erstellen Sie einen separaten Übungsordner und speichern Sie das vollständige Programm als UTF-8-Datei regex_demo.py. Es benötigt nur die Python-Standardbibliothek. Führen Sie in Ihrer Projektumgebung python regex_demo.py aus. Falls Sie außerhalb einer virtuellen Umgebung unter macOS oder Ubuntu arbeiten, kann der Interpreterbefehl python3 heißen.
import re
from datetime import date
text = "A001:3500 B002:8000"
pattern = re.compile(r"(?P<id>[A-Z][0-9]{3}):(?P<amount>[0-9]+)")
for match in pattern.finditer(text):
print(match["id"], int(match["amount"]))
value = "2026-10-17"
if re.fullmatch(r"[0-9]{4}-[0-9]{2}-[0-9]{2}", value):
print(date.fromisoformat(value))
Erwartete Ausgabe:
A001 3500
B002 8000
2026-10-17
re.compile erstellt ein wiederverwendbares Musterobjekt. Die benannten Gruppen id und amount geben den beiden Feldern eine Bedeutung; match["amount"] liefert zunächst Text. Erst int(...) wandelt ihn in eine Ganzzahl um. Die Schleife verarbeitet hier zwei gefundene Paare, nicht zwei zuvor als Ganzes validierte Datensätze.
Der zweite Teil prüft zunächst die Form Jahr-Monat-Tag. Erst date.fromisoformat prüft anschließend, ob die Zahlen einen wirklichen Kalendertag ergeben. Die Unterscheidung zwischen einem Datum und einem Zeitpunkt erläutert auch der Kurs zu datetime und Zeitzonen.
Fehlende Treffer und unzulässige Werte behandeln
Bei re.search(r"[0-9]+", "no digits") gibt es keinen Treffer. Das Ergebnis ist None; ein sofortiger Aufruf von group() würde deshalb scheitern. Speichern Sie das Ergebnis und verzweigen Sie mit if match is not None:, bevor Sie Gruppen oder Positionen lesen. Bei finditer führt eine Textstelle ohne Treffer dagegen einfach zu keinem Schleifendurchlauf für diese Stelle.
Das Datumsformat im Programm akzeptiert sowohl 2026-02-30 als auch 2026-99-99. Beide scheitern erst beim Einlesen als Datum mit ValueError. Bei Benutzereingaben gehört daher eine passende Fehlerbehandlung um den Parser. Wandeln Sie ein erfolgloses Format-Matching nicht automatisch in einen scheinbar gültigen Standardwert um.
Auch beim Betrag ist der Vertrag begrenzt. Das Muster erlaubt keine führenden Minuszeichen, akzeptiert aber 0 und führende Nullen. Im freien Text A001:3500,50 kann es sogar nur A001:3500 finden und den Rest unbeachtet lassen. Prüfen Sie für einen einzelnen vollständigen Wert mit pattern.fullmatch(...) und entscheiden Sie danach getrennt über Obergrenzen, Nullbeträge oder die gewählte Geldeinheit. Für Dezimalbeträge wäre eine andere Eingabe- und Zahlenregel notwendig.
Die Referenz zum Modul re beschreibt die Trefferobjekte und Operationen; die Einführung in reguläre Ausdrücke erläutert den Aufbau von Mustern. Für HTML und CSV verwenden Sie einen passenden Formatparser, wenn Sie Dokumentstruktur beziehungsweise Datensätze lesen wollen. Ein einzelnes Suchmuster bildet deren vollständige Syntax nicht zuverlässig ab.
Eingaben begrenzen und das Verhalten gezielt prüfen
Halten Sie erlaubte Muster unter Ihrer Kontrolle und begrenzen Sie die Eingabelänge entsprechend Ihrer Anwendung. Beliebige fremde Muster oder komplizierte verschachtelte Wiederholungen können über ungeeigneten Eingaben sehr lange laufen. Ein erfolgreiches Format-Matching allein ist weder eine fachliche Prüfung noch eine allgemeine Absicherung gegen solche Laufzeitprobleme.
- Ändern Sie nur
A001ina001. Die erste Ergebniszeile muss verschwinden, während das zweite Paar weiterhin gefunden wird. Stellen Sie die Großschreibung anschließend wieder her. - Ersetzen Sie
3500durch-1. Dieses Paar wird vom aktuellen Muster nicht gefunden. Vergleichen Sie das mit3500,50: Dort kann die Suche den ganzzahligen Anfang als Ausschnitt liefern. Bei einer Gesamtprüfung muss der restliche Text ebenfalls zum Muster passen. - Ändern Sie nur das Datum in
2026-02-30. Die beiden Paare werden weiterhin ausgegeben; danach scheitert der Datumsparser. Der Format-Test wurde dabei bereits bestanden. Stellen Sie den ursprünglichen Wert wieder her und prüfen Sie erneut alle drei ursprünglichen Ausgabezeilen.
Wenn Sie die erlaubten Kennungen oder Beträge später erweitern, ändern Sie die Regel ausdrücklich und ergänzen Sie Fälle an den neuen Grenzen. Unterscheiden Sie dabei stets „im Text gefunden“, „gesamte Zeichenfolge passend“, „erfolgreich geparst“ und „für die Anwendung zulässig“.




