Python Reguläre Ausdrücke (re Modul) – Ein praktischer Leitfaden
Python Reguläre Ausdrücke (re Modul) – Ein praktischer Leitfaden
Entdecken Sie, wie Sie die Macht regulärer Ausdrücke in Python mit dem re-Modul nutzen. Schritt-für-Schritt-Beispiele veranschaulichen gängige Patterns, Matching-Techniken und fortgeschrittene Funktionen.
Was ist ein regulärer Ausdruck?
^a...s$ jeden fünfbuchstabigen String, der mit a beginnt und mit s endet.
^a...s$
Patterns können gegen Strings gematcht werden. Die folgende Tabelle demonstriert, wie sich das Pattern mit verschiedenen Eingaben verhält:
| Ausdruck | String | Gematcht? |
|---|---|---|
^a...s$ | abs | Kein Match |
alias | Match | |
abyss | Match | |
Alias | Kein Match | |
Ein Abakus | Kein Match |
Pythons re-Modul stellt die Werkzeuge bereit, die Sie für die Arbeit mit RegEx benötigen. Hier ist ein schnelles Beispiel, das re.match() verwendet, um ein Pattern gegen einen String zu prüfen:
import re
pattern = '^a...s$'
test_string = 'abyss'
result = re.match(pattern, test_string)
if result:
print("Suche erfolgreich.")
else:
print("Suche erfolglos.")
Wenn das Pattern gefunden wird, gibt re.match() ein Match-Objekt zurück; andernfalls None.
Patterns mit Metazeichen spezifizieren
Metazeichen sind spezielle Symbole, die die Regex-Engine auf einzigartige Weise interpretiert. Unten ist eine Schnellreferenz für die häufigsten Metazeichen:
[] . ^ $ * + ? {} () \ |
Eckige Klammern: []
Eckige Klammern definieren eine Menge von Zeichen zum Matchen. Zum Beispiel matcht [abc] jedes einzelne Vorkommen von a, b oder c.
| Ausdruck | String | Gematcht? |
|---|---|---|
[abc] | a | 1 Match |
ac | 2 Matches | |
Hey Jude | Kein Match | |
abc de ca | 5 Matches |
Bereiche können mit einem Bindestrich ausgedrückt werden, z. B. [a-e] entspricht [abcde]. Um eine Menge zu invertieren, platzieren Sie ein Caret ^ nach der öffnenden Klammer, z. B. [^abc] matcht jedes Zeichen außer a, b oder c.
Punkt: .
| Ausdruck | String | Gematcht? |
|---|---|---|
.. | a | Kein Match |
ac | 1 Match | |
acd | 1 Match | |
acde | 2 Matches (enthält 4 Zeichen) |
Caret: ^ und Dollar: $
Das Caret behauptet den Stringanfang; das Dollarzeichen das Stringende. Zum Beispiel matcht ^a jeden String, der mit a beginnt, während a$ jeden String matcht, der mit a endet.
| Ausdruck | String | Gematcht? |
|---|---|---|
^a | a | 1 Match |
abc | 1 Match | |
bac | Kein Match | |
^ab | abc | 1 Match |
acb | Kein Match (beginnt mit a aber nicht gefolgt von b) |
| Ausdruck | String | Gematcht? |
|---|---|---|
a$ | a | 1 Match |
formula | 1 Match | |
cab | Kein Match |
Quantifier: *, +, ?, {n,m}
Diese Symbole steuern, wie oft das vorherige Element erscheinen soll.
*– null oder mehr Mal.+– ein oder mehr Mal.?– null oder ein Mal.{n,m}– mindestens n und höchstens m Mal.
Beispiele:
| Ausdruck | String | Gematcht? |
|---|---|---|
ma*n | mn | 1 Match |
man | 1 Match | |
maaan | 1 Match | |
main | Kein Match (a wird nicht von n gefolgt) | |
woman | 1 Match |
| Ausdruck | String | Gematcht? |
|---|---|---|
ma+n | mn | Kein Match (kein a) |
man | 1 Match | |
maaan | 1 Match | |
main | Kein Match (a wird nicht von n gefolgt) | |
woman | 1 Match |
| Ausdruck | String | Gematcht? |
|---|---|---|
ma?n | mn | 1 Match |
man | 1 Match | |
maaan | Kein Match (mehr als ein a) | |
main | Kein Match (a wird nicht von n gefolgt) | |
woman | 1 Match |
| Ausdruck | String | Gematcht? |
|---|---|---|
a{2,3} | abc dat | Kein Match |
abc daat | 1 Match (bei daat) | |
aabc daaat | 2 Matches (bei aabc und daaat) | |
aabc daaaat | 2 Matches (bei aabc und daaaat) |
Häufig verwendetes Pattern: [0-9]{2,4} matcht zwei bis vier aufeinanderfolgende Ziffern.
| Ausdruck | String | Gematcht? |
|---|---|---|
[0-9]{2,4} | ab123csde | 1 Match (bei ab123csde) |
12 und 345673 | 3 Matches (12, 3456, 73) | |
1 und 2 | Kein Match |
Alternation: |
Der vertikale Strich implementiert logisches ODER. Zum Beispiel matcht a|b jeden String, der a oder b enthält.
| Ausdruck | String | Gematcht? |
|---|---|---|
a|b | cde | Kein Match |
ade | 1 Match (bei ade) | |
acdbea | 3 Matches (bei acdbea) |
Gruppierung: ()
Klammern gruppieren Sub-Patterns und erfassen gematchte Substrings. Beispiel: (a|b|c)xz matcht jeden String, der a, b oder c gefolgt von xz enthält.
| Ausdruck | String | Gematcht? |
|---|---|---|
(a|b|c)xz | ab xz | Kein Match |
abxz | 1 Match (bei abxz) | |
axz cabxz | 2 Matches (bei axzbc cabxz) |
Escaping: \
Verwenden Sie einen Backslash, um ein Metazeichen als Literal zu behandeln. Zum Beispiel matcht \$a die literale Sequenz $a anstatt $ als End-of-String-Anker zu interpretieren.
Spezielle Sequenzen
Spezielle Sequenzen vereinfachen gängige Patterns. Unten ist eine Referenzliste mit illustrierenden Beispielen.
Stringanfang: \A
| Ausdruck | String | Gematcht? |
|---|---|---|
\Athe | die sonne | Match |
in die sonne | Kein Match |
Wortgrenze: \b
| Ausdruck | String | Gematcht? |
|---|---|---|
\bfoo | fussball | Match |
ein fussball | Match | |
afussball | Kein Match | |
foo\b | der foo | Match |
der afoo test | Match | |
der afootest | Kein Match |
Nicht-Wortgrenze: \B
| Ausdruck | String | Gematcht? |
|---|---|---|
\Bfoo | fussball | Kein Match |
ein fussball | Kein Match | |
afussball | Match | |
foo\B | der foo | Kein Match |
der afoo test | Kein Match | |
der afootest | Match |
Ziffer: \d / Nicht-Ziffer: \D
| Ausdruck | String | Gematcht? |
|---|---|---|
\d | 12abc3 | 3 Matches (bei 12abc3) |
Python | Kein Match | |
\D | 1ab34"50 | 3 Matches (bei 1ab34"50) |
1345 | Kein Match |
Whitespace: \s / Nicht-Whitespace: \S
| Ausdruck | String | Gematcht? |
|---|---|---|
\s | Python RegEx | 1 Match |
PythonRegEx | Kein Match | |
\S | a b | 2 Matches (bei a b) |
| Kein Match |
Wortzeichen: \w / Nicht-Wort: \W
| Ausdruck | String | Gematcht? |
|---|---|---|
\w | 12&": ;c | 3 Matches (bei 12": ;c) |
"%> ! | Kein Match | |
\W | 1a2%c | 1 Match (bei 1a2%c) |
Python | Kein Match |
Stringende: \Z
| Ausdruck | String | Gematcht? |
|---|---|---|
Python\Z | ich mag Python | 1 Match |
ich mag Python Programmierung | Kein Match | |
Python ist spaßig. | Kein Match |
Tipp: Nutzen Sie einen Online-Regex-Tester wie regex101, um Patterns schnell zu erstellen und zu debuggen.
RegEx in Python verwenden
Pythons re-Modul bietet einen reichen Satz an Funktionen und Konstanten für Regex-Operationen. Importieren Sie es mit:
import re
Unten sind die gängigsten Utilities und ihre Verwendung.
re.findall()
Gibt eine Liste aller nicht-überlappenden Matches in einem String zurück.
# Alle Zahlen aus einem String extrahieren
import re
string = 'hallo 12 hi 89. Wie gehts 34'
pattern = '\d+'
result = re.findall(pattern, string)
print(result) # Ausgabe: ['12', '89', '34']
Wenn kein Match gefunden wird, wird eine leere Liste zurückgegeben.
re.split()
Teilt einen String an jeder Stelle, wo das Pattern matcht, und gibt eine Liste von Substrings zurück.
import re
string = 'Zwölf:12 Neunundachtzig:89.'
pattern = '\d+'
result = re.split(pattern, string)
print(result) # Ausgabe: ['Zwölf:', ' Neunundachtzig:', '.']
Verwenden Sie das optionale maxsplit-Argument, um die Anzahl der Splits zu begrenzen. Ein Wert von 0 (Standard) splittet bei jedem Match.
import re
string = 'Zwölf:12 Neunundachtzig:89 Neun:9.'
pattern = '\d+'
# Nur beim ersten Vorkommen splitten
result = re.split(pattern, string, 1)
print(result) # Ausgabe: ['Zwölf:', ' Neunundachtzig:89 Neun:9.']
re.sub()
Ersetzt alle Vorkommen eines Patterns mit einem Ersetzungsstring.
# Alle Whitespace-Zeichen entfernen
import re
string = 'abc 12\nde 23 \n f45 6'
pattern = '\s+'
replace = ''
new_string = re.sub(pattern, replace, string)
print(new_string) # Ausgabe: abc12de23f456
Um Ersetzungen zu begrenzen, geben Sie ein count-Argument an. Ein Wert von 0 ersetzt jeden Match.
new_string = re.sub(r'\s+', replace, string, 1)
print(new_string) # Ausgabe:
# abc12de 23
# f45 6
re.subn()
Wie re.sub(), aber gibt ein Tupel zurück, das den neuen String und die Anzahl der durchgeführten Ersetzungen enthält.
new_string = re.subn(pattern, replace, string)
print(new_string) # Ausgabe: ('abc12de23f456', 4)
re.search()
Findet die erste Position, wo das Pattern matcht.
string = "Python macht Spaß"
match = re.search('\\APython', string)
if match:
print("Pattern im String gefunden")
else:
print("Pattern nicht gefunden")
# Ausgabe: Pattern im String gefunden
Match-Objekt
Wenn ein Match gefunden wird, gibt re.search() ein Match-Objekt zurück. Gängige Methoden und Attribute umfassen:
group()– der gematchte Substring.start()/end()– Indizes des Matches.span()– ein Tupel von (start, end).groups()– alle erfassten Gruppen.
string = '39801 356, 2102 1111'
pattern = '(\d{3}) (\d{2})'
match = re.search(pattern, string)
if match:
print(match.group())
print(match.group(1))
print(match.group(2))
print(match.groups())
print(match.start(), match.end(), match.span())
else:
print("pattern not found")
# Ausgabe:
# 801 35
# 801
# 35
# ('801', '35')
# 2 8 (2, 8)
Raw Strings verwenden (Präfix r)
Das Präfixieren eines String-Literals mit r behandelt Backslashes als literale Zeichen und verhindert versehentliche Escape-Sequenzen. Dies ist besonders nützlich bei Regex-Patterns.
string = '\n und \r sind Escape-Sequenzen.'
result = re.findall(r'[\n\r]', string)
print(result) # Ausgabe: ['\n', '\r']
Für tiefergehende Erkundung des re-Moduls verweisen Sie auf die offizielle Python-Dokumentation.
Python
- Python-Schlüsselwörter & Bezeichner: Reservierte Wörter & Benennungskonventionen meistern
- Python-Datentypen meistern: Praxisleitfaden
- Python-Operatoren meistern: Umfassender Leitfaden
- Python-Funktionsargumente meistern: Positional, Keyword & Default-Parameter
- Python-Dictionaries meistern: Erstellung, Manipulation und fortgeschrittene Techniken
- Python Iteratoren meistern: Funktionsweise und Erstellung eigener Iteratoren
- Python Closures erklärt: Wie verschachtelte Funktionen Variablen erfassen
- Python datetime meistern: Praktischer Leitfaden zu Datumsangaben, Zeiten und Zeitzonen
- Pythons time-Modul meistern: Funktionen, Structs und praktische Beispiele
- Pythons time.sleep() meistern: Best Practices, Multithreading und Praxisbeispiele