Python RegEx
Table of Contents
In diesem Tutorial lernen Sie reguläre Ausdrücke (RegEx) kennen und verwenden das re-Modul von Python, um mit RegEx zu arbeiten (mit Hilfe von Beispielen).
A Regular Expression (RegEx) ist eine Folge von Zeichen, die ein Suchmuster definiert. Zum Beispiel,
^a...s$
Der obige Code definiert ein RegEx Muster. Das Muster ist: eine beliebige Zeichenkette mit fünf Buchstaben, die mit a und endend mith s.
Ein mit RegEx definiertes Muster kann zum Abgleich mit einer Zeichenkette verwendet werden.
Expression | String | Matched? |
---|---|---|
^a...s$ |
abs |
No match |
alias |
Match | |
abyss |
Match | |
Alias |
No match | |
An abacus |
No match |
Python hat ein Modul namens re
um mit RegEx zu arbeiten. Hier ist ein Beispiel:
import re pattern = '^a...s$' test_string = 'abyss' result = re.match(pattern, test_string) if result: print("Search successful.") else: print("Search unsuccessful.")
Hier haben wir re.match()
Funktion zum Suchen pattern innerhalb der test_string. Die Methode gibt ein Match-Objekt zurück, wenn die Suche erfolgreich war. Wenn nicht, kehrt es zurück None
.
Es gibt weitere verschiedene Funktionen, die in der re Modul, um mit RegEx zu arbeiten. Bevor wir das erforschen, wollen wir etwas über reguläre Ausdrücke selbst lernen.
Wenn Sie die Grundlagen von RegEx bereits kennen, springen Sie zu Python RegEx.
Specify Pattern Using RegEx
Um reguläre Ausdrücke zu spezifizieren, werden Meta-Zeichen verwendet. Im obigen Beispiel, ^
und $
sind Metazeichen.
MetaCharacters
Metazeichen sind Zeichen, die von einer RegEx-Engine auf eine besondere Weise interpretiert werden. Hier finden Sie eine Liste von Metazeichen:
[] . ^ $ * + ? {} () \ |
[]
– Square brackets
Die eckigen Klammern geben eine Gruppe von Zeichen an, die Sie abgleichen möchten.
Expression | String | Matched? |
---|---|---|
[abc] |
a |
1 match |
ac |
2 matches | |
Hey Jude |
No match | |
abc de ca |
5 matches |
Hier, [abc]
passt, wenn die gesuchte Zeichenkette eines der folgenden Elemente enthält a
, b
or c
.
Sie können auch einen Bereich von Zeichen angeben, indem Sie -
innerhalb eckiger Klammern.
[a-e]
ist das Gleiche wie[abcde]
.[1-4]
ist das Gleiche wie[1234]
.[0-39]
ist das Gleiche wie[01239]
.
Sie können den Zeichensatz mit Caret ergänzen (invertieren). ^
symbol am Anfang einer eckigen Klammer.
[^abc]
bedeutet ein beliebiges Zeichen außer a or b or c.[^0-9]
bedeutet ein beliebiges nicht-ziffriges Zeichen.
.
– Period
Ein Punkt passt zu jedem einzelnen Zeichen (außer Zeilenumbruch '\n'
).
Expression | String | Matched? |
---|---|---|
.. |
a |
No match |
ac |
1 match | |
acd |
1 match | |
acde |
2 matches (contains 4 characters) |
^
– Caret
Das Caret symbol ^
wird verwendet, um zu prüfen, ob eine Zeichenkette startet mit einen bestimmten Charakter.
Expression | String | Matched? |
---|---|---|
^a |
a |
1 match |
abc |
1 match | |
bac |
No match | |
^ab |
abc |
1 match |
acb |
No match (starts with a but not followed by b ) |
$
– Dollar
Das Dollar Symbol $
wird verwendet, um zu überprüfen, ob ein String endet mit einen bestimmten Charakter.
Expression | String | Matched? |
---|---|---|
a$ |
a |
1 match |
formula |
1 match | |
cab |
No match |
*
– Star
Das Stern symbol *
Streichhölzer null oder mehr Vorkommen des ihm hinterlassenen Musters.
Expression | String | Matched? |
---|---|---|
ma*n |
mn |
1 match |
man |
1 match | |
maaan |
1 match | |
main |
No match (a is not followed by n ) |
|
woman |
1 match |
+
– Plus
Dasplus symbol +
streichhölzer ein oder mehrere Vorkommen des ihm hinterlassenen Musters.
Expression | String | Matched? |
---|---|---|
ma+n |
mn |
No match (no a character) |
man |
1 match | |
maaan |
1 match | |
main |
No match (a is not followed by n) | |
woman |
1 match |
?
– Question Mark
Das Fragezeichen Symbol ?
streichhölzer Null oder ein Vorkommen des ihm hinterlassenen Musters.
Expression | String | Matched? |
---|---|---|
ma?n |
mn |
1 match |
man |
1 match | |
maaan |
No match (more than one a character) |
|
main |
No match (a is not followed by n) | |
woman |
1 match |
{}
– Braces
Betrachten Sie diesen Code: {n,m}
. Dies bedeutet mindestens n, und allenfalls m Wiederholungen des es überlassenen Musters.
Expression | String | Matched? |
---|---|---|
a{2,3} |
abc dat |
No match |
abc daat |
1 match (at daat ) |
|
aabc daaat |
2 matches (at aabc and daaat ) |
|
aabc daaaat |
2 matches (at aabc and daaaat ) |
Lassen Sie uns ein weiteres Beispiel ausprobieren. Dieses RegEx[0-9]{2, 4}
stimmt mit mindestens 2 Ziffern, aber nicht mehr als 4 Ziffern überein
Expression | String | Matched? |
---|---|---|
[0-9]{2,4} |
ab123csde |
1 match (match at ab123csde ) |
12 and 345673 |
3 matches (12 , 3456 , 73 ) |
|
1 and 2 |
No match |
|
– Alternation
Vertikaler Balken |
wird zur Abwechslung verwendet (or
operator).
Expression | String | Matched? |
---|---|---|
a|b |
cde |
No match |
ade |
1 match (match at ade ) |
|
acdbea |
3 matches (at acdbea ) |
Hier, a|b
passt auf jede Zeichenkette, die entweder a oder b
()
– Group
Parenthese ()
wird verwendet, um Untermuster zu gruppieren. Zum Beispiel, (a|b|c)xz
Übereinstimmung mit einer beliebigen Zeichenfolge, die entweder a oder b oder c gefolgt von xz
Expression | String | Matched? |
---|---|---|
(a|b|c)xz |
ab xz |
No match |
abxz |
1 match (match at abxz ) |
|
axz cabxz |
2 matches (at axzbc cabxz ) |
\
– Backslash
Backlash \
wird verwendet, um verschiedene Zeichen zu escapen, einschließlich aller Metazeichen. Zum Beispiel,
\$a
Übereinstimmung, wenn eine Zeichenfolge enthält $
gefolgt von a
. Hier, $
wird von einer RegEx-Engine nicht auf besondere Weise interpretiert.
Wenn Sie unsicher sind, ob ein Zeichen eine besondere Bedeutung hat oder nicht, können Sie die \
davor platzieren. Dadurch wird sichergestellt, dass das Zeichen nicht besonders behandelt wird.
Special Sequences
Spezielle Sequenzen machen häufig verwendete Muster einfacher zu schreiben. Hier finden Sie eine Liste von speziellen Sequenzen:
\A
– Stimmt überein, wenn die angegebenen Zeichen am Anfang einer Zeichenkette stehen.
Expression | String | Matched? |
---|---|---|
\Athe |
the sun |
Match |
In the sun |
No match |
\b
– Stimmt überein, wenn die angegebenen Zeichen am Anfang oder am Ende eines Wortes stehen.
Expression | String | Matched? |
---|---|---|
\bfoo |
football |
Match |
a football |
Match | |
afootball |
No match | |
foo\b |
the foo |
Match |
the afoo test |
Match | |
the afootest |
No match |
\B
– Gegenteil von \b
. Stimmt überein, wenn die angegebenen Zeichen . sind nicht am Anfang oder Ende eines Wortes.
Expression | String | Matched? |
---|---|---|
\Bfoo |
football |
No match |
a football |
No match | |
afootball |
Match | |
foo\B |
the foo |
No match |
the afoo test |
No match | |
the afootest |
Match |
\d
– Entspricht einer beliebigen Dezimalstelle. Äquivalent zu [0-9]
Expression | String | Matched? |
---|---|---|
\d |
12abc3 |
3 matches (at 12abc3 ) |
Python |
No match |
\D
– Passt auf jede nicht dezimale Ziffer. Äquivalent zu [^0-9]
Expression | String | Matched? |
---|---|---|
\D |
1ab34"50 |
3 matches (at 1ab34"50 ) |
1345 |
No match |
\s
– Streichhölzer, wenn eine Zeichenkette ein beliebiges Leerzeichen enthält. Äquivalent zu [ \t\n\r\f\v]
.
Expression | String | Matched? |
---|---|---|
\s |
Python RegEx |
1 match |
PythonRegEx |
No match |
\S
– Streichhölzer wenn eine Zeichenkette ein beliebiges Nicht-Leerzeichen enthält. Äquivalent zu [^ \t\n\r\f\v]
.
Expression | String | Matched? |
---|---|---|
\S |
a b |
2 matches (at a b ) |
|
No match |
\w
– Passt auf jedes alphanumerische Zeichen (Ziffern und Alphabete). Äquivalent zu [a-zA-Z0-9_]
. Übrigens, der Unterstrich _
wird ebenfalls als alphanumerisches Zeichen betrachtet.
Expression | String | Matched? |
---|---|---|
\w |
12&": ;c |
3 matches (at 12&": ;c ) |
%"> ! |
No match |
\W
– Passt auf jedes nicht-alphanumerische Zeichen. Äquivalent zu [^a-zA-Z0-9_]
Expression | String | Matched? |
---|---|---|
\W |
1a2%c |
1 match (at 1a2%c ) |
Python |
No match |
\Z
– Stimmt überein, wenn die angegebenen Zeichen am Ende einer Zeichenkette stehen.
Expression | String | Matched? |
---|---|---|
Python\Z |
I like Python |
1 match |
I like Python Programming |
No match | |
Python is fun. |
No match |
Tipp
Zum Erstellen und Testen von regulären Ausdrücken können Sie RegEx-Tester-Tools verwenden, z. B. regex101. Dieses Tool hilft Ihnen nicht nur beim Erstellen von regulären Ausdrücken, sondern auch beim Erlernen derselben.
Nachdem Sie nun die Grundlagen von RegEx verstanden haben, lassen Sie uns besprechen, wie Sie RegEx in Ihrem Python-Code verwenden können.
Python RegEx
Python hat ein Modul namens re
mit regulären Ausdrücken zu arbeiten. Um es zu verwenden, müssen wir das Modul importieren.
import re
Das Modul definiert mehrere Funktionen und Konstanten für die Arbeit mit RegEx.
re.findall()
The re.findall()
Die Methode gibt eine Liste von Zeichenketten zurück, die alle Übereinstimmungen enthält.
Beispiel 1: re.findall()
# Programm zum Extrahieren von Zahlen aus einer Zeichenfolge import re string = 'hello 12 hi 89. Howdy 34' pattern = '\d+' result = re.findall(pattern, string) print(result) # Output: ['12', '89', '34']
Wenn das Muster nicht gefunden wird, re.findall()
gibt eine leere Liste zurück.
re.split()
Die re.split
Methode teilt die Zeichenfolge auf, wenn eine Übereinstimmung vorliegt, und gibt eine Liste von Zeichenfolgen zurück, bei denen die Aufteilungen aufgetreten sind.
Beispiel 2: re.split()
import re string = 'Twelve:12 Eighty nine:89.' pattern = '\d+' result = re.split(pattern, string) print(result) # Output: ['Twelve:', ' Eighty nine:', '.']
Wenn das Muster nicht gefunden wird, re.split()
gibt eine Liste zurück, die die ursprüngliche Zeichenkette enthält.
Sie können passieren maxsplit
Argument zum re.split()
method. Das ist die maximale Anzahl von Splits, die auftreten werden.
import re string = 'Twelve:12 Eighty nine:89 Nine:9.' pattern = '\d+' # maxsplit = 1 # split only at the first occurrence result = re.split(pattern, string, 1) print(result) # Output: ['Twelve:', ' Eighty nine:89 Nine:9.']
Übrigens: Der Standardwert von maxsplit
ist 0; das heißt alle möglichen Aufteilungen.
re.sub()
Die Syntax von re.sub()
ist:
re.sub(pattern, replace, string)
Die Methode gibt einen String zurück, in dem übereinstimmende Vorkommen durch den Inhalt von . ersetzt werden replace variable.
Beispiel 3: re.sub()
# Programm zum Entfernen aller Leerzeichen import re # multiline string string = 'abc 12\ de 23 \n f45 6' # matches all whitespace characters pattern = '\s+' # empty string replace = '' new_string = re.sub(pattern, replace, string) print(new_string) # Output: abc12de23f456
Wenn das Muster nicht gefunden wird, re.sub()
gibt die ursprüngliche Zeichenfolge zurück
Sie können passieren count als vierten Parameter an die re.sub()
method. Wenn es weggelassen wird, ergibt sich 0. Dadurch werden alle Vorkommen ersetzt.
import re # multiline string string = 'abc 12\ de 23 \n f45 6' # matches all whitespace characters pattern = '\s+' replace = '' new_string = re.sub(r'\s+', replace, string, 1) print(new_string) # Output: # abc12de 23 # f45 6
re.subn()
Dasre.subn()
ist ähnlich wie re.sub()
außer es gibt ein Tupel von 2 Elementen zurück, das die neue Zeichenfolge und die Anzahl der vorgenommenen Ersetzungen enthält.
Beispiel 4: re.subn()
# Programm zum Entfernen aller Whitespaces import re # multiline string string = 'abc 12\ de 23 \n f45 6' # matches all whitespace characters pattern = '\s+' # empty string replace = '' new_string = re.subn(pattern, replace, string) print(new_string) # Output: ('abc12de23f456', 4)
re.search()
Die re.search()
Methode nimmt zwei Argumente entgegen: ein Muster und eine Zeichenkette. Die Methode sucht nach der ersten Stelle, an der das RegEx-Muster eine Übereinstimmung mit der Zeichenkette ergibt
Wenn die Suche erfolgreich ist, re.search()
gibt ein Übereinstimmungsobjekt zurück; wenn nicht, kehrt es zurück None
.
match = re.search(pattern, str)
Beispiel 5: re.search()
import re string = "Python macht Freude" # prüfen, ob 'Python' am Anfang steht match = re.search('\APython', string) if match: print("Muster innerhalb der Zeichenkette gefunden") else: print("Muster nicht gefunden") # Output: Muster innerhalb der Zeichenkette gefunden
Hier, match enthält ein Match-Objekt.
Match object
Sie können Methoden und Attribute eines Match-Objekts mit der Funktion dir() abrufen.
Einige der am häufigsten verwendeten Methoden und Attribute von Match-Objekten sind:
match.group()
Die group()
Methode gibt den Teil der Zeichenkette zurück, in dem es eine Übereinstimmung gibt.
Beispiel 6: Match object
import re string = '39801 356, 2102 1111' # Dreistellige Zahl gefolgt von einem Leerzeichen gefolgt von einer zweistelligen Zahl pattern = '(\d{3}) (\d{2})' # match-Variable enthält ein Match-Objekt. match = re.search(pattern, string) if match: print(match.group()) else: print("Muster nicht gefunden") # Output: 801 35
Hier, match Variable enthält ein Match-Objekt.
Unser Muster (\d{3}) (\d{2})
hat zwei Untergruppen (\d{3})
und (\d{2})
. Sie können den Teil der Zeichenkette dieser eingeklammerten Untergruppen erhalten. So geht’s:
>>> match.group(1) '801' >>> match.group(2) '35' >>> match.group(1, 2) ('801', '35') >>> match.groups() ('801', '35')
match.start(), match.end() and match.span()
Die start()
Funktion gibt den Index des Anfangs der übereinstimmenden Teilzeichenkette zurück. Similarly, end()
gibt den Endindex der übereinstimmenden Teilzeichenkette zurück.
>>> match.start() 2 >>> match.end() 8
Die span()
Funktion gibt ein Tupel zurück, das den Start- und Endindex des übereinstimmenden Teils enth
>>> match.span() (2, 8)
match.re and match.string
Dasre
Attribut eines übereinstimmenden Objekts gibt ein Objekt des regulären Ausdrucks zurück. Ähnlich, string
Attribut gibt den übergebenen String zurück.
>>> match.re re.compile('(\\d{3}) (\\d{2})') >>> match.string '39801 356, 2102 1111'
Wir haben alle häufig verwendeten Methoden abgedeckt, die in der re
Modul. Wenn Sie mehr erfahren möchten, besuchen Sie Python 3 re modul.
Using r prefix before RegEx
When r or R Präfix vor einem regulären Ausdruck verwendet wird, bedeutet es rohe Zeichenfolge. Zum Beispiel, '\n'
ist eine neue Zeile, während r'\n'
bedeutet zwei Zeichen: ein Backslash \
gefolgt vonn
.
Backlash \
wird verwendet, um verschiedene Zeichen zu escapen, einschließlich aller Metazeichen. Allerdings ist die Verwendung von r präfix macht \
wie ein normales Zeichen behandeln.
Beispiel 7: Raw string using r prefix
import re string = '\n and \r are escape sequences.' result = re.findall(r'[\n\r]', string) print(result) # Output: ['\n', '\r']