Reguläre Ausdrücke in Python
Dieser Artikel erklärt reguläre Ausdrücke in Python.
Wir werden eine breite Palette von Themen behandeln, von der grundlegenden Verwendung des re-Moduls bis hin zur komplexen Mustererkennung mit regulären Ausdrücken.
YouTube Video
Reguläre Ausdrücke in Python
Das re-Modul wird verwendet, um Zeichenketten mithilfe von regulären Ausdrücken zu durchsuchen und zu bearbeiten.
Was ist das re-Modul?
Das re-Modul ist in der Standardbibliothek von Python enthalten und bietet Funktionen zur Bearbeitung von Zeichenketten mit regulären Ausdrücken. Reguläre Ausdrücke werden verwendet, um bestimmte Zeichenmuster effizient zu finden, zu extrahieren oder zu ersetzen.
Grundlegende Muster für reguläre Ausdrücke
Reguläre Ausdrücke definieren Muster mithilfe spezieller Symbole. Im Folgenden sind einige grundlegende Muster aufgeführt.
.: Beliebiges einzelnes Zeichen^: Anfang einer Zeichenkette$: Ende einer Zeichenkette\d: Beliebige Ziffer (0-9)\w: Beliebiges Wortzeichen (a-z, A-Z, 0-9, _)\s: Beliebiges Leerzeichen*: Null oder mehr Wiederholungen+: Eine oder mehr Wiederholungen[]: Zeichenklasse (z. B.[a-z]passt zu Kleinbuchstaben)
1import re
2
3pattern = r"\d{3}-\d{4}"
4text = "My postal code is 123-4567."
5result = re.search(pattern, text)
6if result:
7 print(result.group()) # Output: 123-4567
8
9# Define a pattern using basic regular expression symbols
10pattern = r"^\w+\s\d+\s[a-zA-Z]+$"
11
12# Example text to test the pattern
13text = "Room 23 Tokyo"
14
15# Check if the pattern matches the text
16result = re.match(pattern, text)
17if result:
18 print("Matched:", result.group())
19else:
20 print("No match")- Dieser Code prüft zunächst, ob die Zeichenfolge einem Postleitzahlmuster entspricht. Als Nächstes wird geprüft, ob die gesamte Zeichenfolge (von Anfang bis Ende) einem Muster entspricht, das aus einem Wort, Leerraum, Ziffern, Leerraum und einem englischen Wort besteht. Dies hilft Ihnen zu verstehen, wie die grundlegenden Elemente regulärer Ausdrücke kombiniert werden können.
Wie man Matching-Funktionen verwendet
re.match()
re.match() prüft, ob der Anfang der Zeichenkette mit dem angegebenen Muster übereinstimmt.
1import re
2
3pattern = r"\w+"
4text = "Python is powerful"
5match = re.match(pattern, text)
6if match:
7 print(match.group()) # Output: Python- Dieser Code prüft, ob die Zeichenfolge mit einem Wortzeichen (alphanumerisch oder Unterstrich) beginnt. Das erste Wort 'Python' entspricht dem Muster und wird ausgegeben.
re.search()
re.search() durchsucht die gesamte Zeichenkette und gibt den ersten Treffer zurück.
1import re
2
3pattern = r"powerful"
4text = "Python is powerful and versatile"
5search = re.search(pattern, text)
6if search:
7 print(search.group()) # Output: powerful- Dieser Code durchsucht die gesamte Zeichenfolge nach dem Wort 'powerful' und gibt den ersten Treffer zurück. Als Ergebnis gibt
re.search()die passende Zeichenfolge 'powerful' aus.
re.findall()
re.findall() gibt alle Treffer des Musters als Liste zurück.
1import re
2
3pattern = r"\b\w{6}\b"
4text = "Python is powerful and versatile"
5matches = re.findall(pattern, text)
6print(matches) # Output: ['Python', 'strong']- Dieser Code findet alle Wörter, die genau sechs Zeichen lang sind, und gibt sie als Liste zurück. 'Python' in der Zeichenfolge erfüllt die Bedingung, und die Liste
['Python']wird ausgegeben.
re.finditer()
re.finditer() gibt alle Treffer als Iterator zurück, wodurch detaillierte Informationen für jeden Treffer abgerufen werden können.
1import re
2
3pattern = r"\b\w{6}\b"
4text = "Python is powerful and versatile"
5matches = re.finditer(pattern, text)
6for match in matches:
7 print(match.group()) # Output: Python- Dieser Code sucht der Reihe nach nach allen Wörtern mit sechs Buchstaben und verarbeitet jeden Treffer über einen Iterator. 'Python' entspricht hier dem Muster und wird ausgegeben.
Ersetzen und Aufteilen
re.sub()
re.sub() ersetzt Teile der Zeichenkette, die dem regulären Ausdruck entsprechen, durch eine andere Zeichenkette.
1import re
2
3pattern = r"\d+"
4text = "There are 100 apples"
5new_text = re.sub(pattern, "many", text)
6print(new_text) # Output: There are many apples- Dieser Code ersetzt alle Ziffern in der Zeichenfolge durch 'many'.
re.split()
re.split() teilt die Zeichenkette an Stellen, die mit dem regulären Ausdruck übereinstimmen.
1import re
2
3pattern = r"\s+"
4text = "Python is powerful"
5parts = re.split(pattern, text)
6print(parts) # Output: ['Python', 'is', 'powerful']- Dieser Code teilt die Zeichenfolge anhand eines oder mehrerer Leerraumzeichen auf. Dadurch wird die Zeichenfolge in Wörter aufgeteilt, sodass
['Python', 'is', 'powerful']entsteht.
Gruppen und Erfassungen
Durch die Verwendung von Gruppierungen in regulären Ausdrücken können übereinstimmende Teilzeichenketten einfach extrahiert werden. Eingeschlossen in Klammern () wird es als Gruppe erfasst.
1import re
2
3pattern = r"(\d{3})-(\d{4})"
4text = "My postal code is 123-4567."
5match = re.search(pattern, text)
6if match:
7 print(match.group(1)) # Output: 123
8 print(match.group(2)) # Output: 4567- Dieser Code extrahiert die 3-stellige und die 4-stellige Zahl als separate Gruppen aus einer Postleitzahl der Form '123-4567'.
group(1)liefert die ersten drei Ziffern '123', undgroup(2)liefert die letzten vier Ziffern '4567'.
Benannte Gruppen
Mit benannten Gruppen können Werte über aussagekräftige Namen abgerufen werden, statt sich auf Indizes zu verlassen. Im Folgenden ein konkretes Beispiel, das Datum und Level aus einem Log extrahiert.
1import re
2
3log = "2025-10-25 14:00:01 [ERROR] Something failed"
4
5pattern = r"(?P<date>\d{4}-\d{2}-\d{2}) (?P<time>\d{2}:\d{2}:\d{2}) \[(?P<level>[A-Z]+)\] (?P<msg>.*)"
6m = re.search(pattern, log)
7if m:
8 print(m.group("date"), m.group("time"), m.group("level"))
9 print("message:", m.group("msg"))- Dieser Code verwendet benannte Gruppen, um Datum, Uhrzeit, Level und Nachricht aus einer Log-Zeichenfolge zu extrahieren. Die Werte werden über aussagekräftige Namen statt über Indizes abgerufen.
Verwendung von Flag-Optionen
Das re-Modul verfügt über mehrere Flag-Optionen, um das Suchverhalten zu steuern.
re.IGNORECASE(re.I): Eine Flag-Option, die die Groß-/Kleinschreibung im Abgleich ignoriert.re.MULTILINE(re.M): Eine Flag-Option, die die Übereinstimmung über mehrere Zeilen hinweg ermöglicht.re.DOTALL(re.S): Eine Flag-Option, bei der Punkt.auch mit Zeilenumbrüchen übereinstimmt.
1import re
2
3pattern = r"python"
4text = "Python is powerful"
5match = re.search(pattern, text, re.IGNORECASE)
6if match:
7 print(match.group()) # Output: Python- Dieser Code sucht nach dem Wort 'python' ohne Beachtung der Groß-/Kleinschreibung. Durch Verwendung des Flags
re.IGNORECASEwird auch 'Python' erkannt.
Vorteile von regulären Ausdrucksobjekten (re.compile)
Ein Muster mit re.compile zu kompilieren erleichtert die Wiederverwendung und verbessert die Lesbarkeit. Hier können auch Flags gesetzt werden.
Das folgende Beispiel sucht mit einem kompilierten Muster wiederholt nach Treffern über mehrere Zeilen hinweg. Wenn Sie dasselbe Muster häufig verwenden, verbessert das Kompilieren mit re.compile die Leistung.
1import re
2
3pattern = re.compile(r"User: (\w+), ID: (\d+)")
4text = "User: alice, ID: 1\nUser: bob, ID: 2"
5
6for m in pattern.finditer(text):
7 print(m.groups())- Dieser Code verwendet einen kompilierten regulären Ausdruck, um Benutzernamen und IDs aus mehreren Zeilen zu extrahieren.
re.compileerhöht die Effizienz bei der Wiederverwendung desselben Musters und macht den Code zudem besser lesbar.
Anwendungen
Betrachten Sie zum Beispiel ein Skript, das alle E-Mail-Adressen aus einer Textdatei extrahiert.
1import re
2
3pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
4text = "Contact us at info@example.com or support@service.com."
5emails = re.findall(pattern, text)
6print(emails) # Output: ['info@example.com', 'support@service.com']- Dieser Code findet alle E-Mail-Adressen in der Zeichenfolge und extrahiert sie als Liste.
Fazit
Das re-Modul ist ein leistungsstarkes Werkzeug zur Zeichenkettenbearbeitung in Python. Hier haben wir ein breites Spektrum von der Grundnutzung bis hin zu fortgeschrittenen regulären Ausdrücken mit Gruppierungen und Flag-Optionen behandelt. Die regulären Ausdrücke von Python sind sehr leistungsfähig und ein unverzichtbares Werkzeug für die Textverarbeitung.
Sie können den obigen Artikel mit Visual Studio Code auf unserem YouTube-Kanal verfolgen. Bitte schauen Sie sich auch den YouTube-Kanal an.