Reguläre Ausdrücke in Python meistern
Reguläre Ausdrücke (Regex oder RegExp) sind leistungsstarke Werkzeuge zum Musterabgleich in Zeichenketten. Pythons re
-Modul bietet eine umfassende Schnittstelle für die Arbeit mit ihnen und ermöglicht so eine anspruchsvolle Textmanipulation und Datenextraktion. Dieses Tutorial führt Sie durch die wesentlichen Funktionen und Konzepte und befähigt Sie, die Leistungsfähigkeit regulärer Ausdrücke in Ihren Python-Projekten effektiv zu nutzen.
Inhaltsverzeichnis
re.match()
: Abgleich am Anfangre.search()
: Finden des ersten Treffersre.compile()
: Performance-Optimierung- Flags: Modifizierung des Abgleichverhaltens
- Zeichensätze: Definition zulässiger Zeichen
- Suchen und Ersetzen mit
re.sub()
re.findall()
: Extrahieren aller Trefferre.finditer()
: Iterieren über Trefferre.split()
: Aufteilen von Zeichenketten nach Muster- Grundlegende Muster: Anker, Zeichenklassen
- Wiederholung: Quantoren und gieriger vs. nicht gieriger Abgleich
- Spezialsequenzen: Ziffern, Leerzeichen, Wortzeichen
re.escape()
: Umgang mit Sonderzeichen- Erfassende Gruppen und die
group()
-Methode
1. re.match()
: Abgleich am Anfang
Die Funktion re.match()
versucht, das Muster nur ganz am Anfang der Zeichenkette abzugleichen. Sie gibt ein Match-Objekt zurück, wenn erfolgreich, andernfalls None
.
import re
text = "Hello World"
pattern = "Hello"
match = re.match(pattern, text)
if match:
print("Treffer gefunden:", match.group(0))
else:
print("Kein Treffer gefunden")
2. re.search()
: Finden des ersten Treffers
re.search()
durchsucht die gesamte Zeichenkette nach dem ersten Vorkommen des Musters. Im Gegensatz zu re.match()
muss der Treffer nicht am Anfang stehen.
import re
text = "Hello World"
pattern = "World"
match = re.search(pattern, text)
if match:
print("Treffer gefunden:", match.group(0))
else:
print("Kein Treffer gefunden")
3. re.compile()
: Performance-Optimierung
Für eine bessere Performance, insbesondere bei wiederholter Verwendung desselben Musters, kompilieren Sie es mit re.compile()
. Dies erzeugt ein wiederverwendbares Musterobjekt.
import re
compiled_pattern = re.compile(r"d+") # Muster kompilieren
text1 = "Es gibt 123 Äpfel"
text2 = "Und 456 Orangen"
match1 = compiled_pattern.search(text1)
match2 = compiled_pattern.search(text2)
print(match1.group(0)) # Ausgabe: 123
print(match2.group(0)) # Ausgabe: 456
4. Flags: Modifizierung des Abgleichverhaltens
Flags modifizieren den Abgleichprozess. re.IGNORECASE
führt einen nicht-case-sensitiven Abgleich durch, und re.MULTILINE
behandelt jede Zeile als separate Zeichenkette für ^
und $
-Anker.
import re
text = "Hello world"
pattern = re.compile("hello", re.IGNORECASE)
match = pattern.search(text)
print(match.group(0)) # Ausgabe: Hello
5. Zeichensätze: Definition zulässiger Zeichen
Zeichensätze ([]
) geben zulässige Zeichen an. Zum Beispiel gleicht [a-z]
Kleinbuchstaben ab.
import re
text = "abc123XYZ"
pattern = re.compile("[a-z]+")
match = pattern.search(text)
print(match.group(0)) # Ausgabe: abc
6. Suchen und Ersetzen mit re.sub()
re.sub()
ersetzt Vorkommen eines Musters durch eine Ersatzzeichenkette.
import re
text = "Hello World"
new_text = re.sub("World", "Python", text)
print(new_text) # Ausgabe: Hello Python
7. re.findall()
: Extrahieren aller Treffer
re.findall()
gibt eine Liste aller nicht-überlappenden Treffer zurück.
import re
text = "123 abc 456 def"
numbers = re.findall(r"d+", text)
print(numbers) # Ausgabe: ['123', '456']
8. re.finditer()
: Iterieren über Treffer
re.finditer()
gibt einen Iterator zurück, der Match-Objekte liefert. Speichereffizienter bei vielen Treffern in großen Zeichenketten.
import re
text = "123 abc 456 def"
for match in re.finditer(r"d+", text):
print(match.group(0)) # Ausgabe: 123, 456 (in separaten Zeilen)
9. re.split()
: Aufteilen von Zeichenketten nach Muster
re.split()
teilt eine Zeichenkette basierend auf einem Muster auf.
import re
text = "Apfel,Banane,Kirsche"
fruits = re.split(r",", text)
print(fruits) # Ausgabe: ['Apfel', 'Banane', 'Kirsche']
10. Grundlegende Muster: Anker, Zeichenklassen
.
: Stimmt mit jedem Zeichen außer Zeilenumbruch überein.^
: Stimmt mit dem Anfang der Zeichenkette überein.$
: Stimmt mit dem Ende der Zeichenkette überein.[]
: Stimmt mit einer Menge von Zeichen überein (z. B.[abc]
,[a-z]
).[^...]
: Stimmt mit jedem Zeichen überein, das *nicht* in der Menge enthalten ist (negierter Zeichensatz).
11. Wiederholung: Quantoren und gieriger vs. nicht gieriger Abgleich
*
: Null oder mehr Vorkommen.+
: Ein oder mehr Vorkommen.?
: Null oder ein Vorkommen.{m}
: Genaum
Vorkommen.{m,n}
: Vonm
bisn
Vorkommen.*?
,+?
,??
,{m,n}?
: Nicht-gierige Versionen (stimmen mit der kürzestmöglichen Zeichenkette überein).
12. Spezialsequenzen: Ziffern, Leerzeichen, Wortzeichen
d
: Stimmt mit jeder Ziffer (0-9) überein.D
: Stimmt mit jedem Nicht-Ziffern-Zeichen überein.s
: Stimmt mit jedem Leerzeichen (Leerzeichen, Tabulator, Zeilenumbruch) überein.S
: Stimmt mit jedem Nicht-Leerzeichen überein.w
: Stimmt mit jedem alphanumerischen Zeichen (Buchstaben, Zahlen, Unterstrich) überein.W
: Stimmt mit jedem nicht-alphanumerischen Zeichen überein.
13. re.escape()
: Umgang mit Sonderzeichen
re.escape()
maskiert Sonderzeichen in einer Zeichenkette, sodass Sie sie als wörtliches Muster verwenden können, ohne unbeabsichtigte Regex-Interpretationen.
14. Erfassende Gruppen und die group()
-Methode
Klammern ()
erstellen erfassende Gruppen. Die group()
-Methode greift auf erfasste Teilzeichenketten zu.
import re
text = "Meine Telefonnummer ist 123-456-7890"
match = re.search(r"(d{3})-(d{3})-(d{4})", text)
if match:
vorwahl = match.group(1)
netz = match.group(2)
rufnummer = match.group(3)
print(f"Vorwahl: {vorwahl}, Netz: {netz}, Rufnummer: {rufnummer}")
Dieses Tutorial bietet eine solide Grundlage für Pythons re
-Modul. Die weitere Erkundung fortgeschrittener Techniken wird Ihre Möglichkeiten der Zeichenkettenverarbeitung erheblich verbessern. Konsultieren Sie die offizielle Python-Dokumentation für eine vollständige Referenz.