Python-RegEx
Python RegEx
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).
Eine Reg ular Ex pression (RegEx) ist eine Zeichenfolge, die ein Suchmuster definiert. Zum Beispiel
^a...s$
Der obige Code definiert ein RegEx-Muster. Das Muster ist:jede Zeichenfolge aus fünf Buchstaben, die mit a beginnt und endet mit s .
Ein mit RegEx definiertes Muster kann zum Abgleich mit einer Zeichenfolge verwendet werden.
Ausdruck | String | Übereinstimmung? |
---|---|---|
^a...s$ | abs | Keine Übereinstimmung |
alias | Übereinstimmung | |
abyss | Übereinstimmung | |
Alias | Keine Übereinstimmung | |
An abacus | Keine Übereinstimmung |
Python hat ein Modul namens re
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()
verwendet Funktion, um Muster zu suchen innerhalb der test_string . Die Methode gibt ein Übereinstimmungsobjekt zurück, wenn die Suche erfolgreich ist. Wenn nicht, wird None
zurückgegeben .
Es gibt mehrere andere Funktionen, die in re definiert sind Modul, um mit RegEx zu arbeiten. Bevor wir uns damit befassen, wollen wir etwas über reguläre Ausdrücke selbst lernen.
Wenn Sie die Grundlagen von RegEx bereits kennen, springen Sie zu Python RegEx.
Muster mit RegEx angeben
Um reguläre Ausdrücke anzugeben, werden Metazeichen verwendet. Im obigen Beispiel ^
und $
sind Metazeichen.
Metazeichen
Metazeichen sind Zeichen, die von einer RegEx-Engine auf besondere Weise interpretiert werden. Hier ist eine Liste von Metazeichen:
[] . ^ $ * + ? {} () \ |
[]
- Eckige Klammern
Eckige Klammern geben eine Reihe von Zeichen an, die Sie abgleichen möchten.
Ausdruck | String | Übereinstimmung? |
---|---|---|
[abc] | a | 1 Übereinstimmung |
ac | 2 Übereinstimmungen | |
Hey Jude | Keine Übereinstimmung | |
abc de ca | 5 Übereinstimmungen |
Hier, [abc]
stimmt überein, wenn die zu vergleichende Zeichenfolge einen der a
enthält , b
oder c
.
Sie können auch einen Zeichenbereich mit -
angeben in eckigen Klammern.
[a-e]
ist dasselbe wie[abcde]
.[1-4]
ist dasselbe wie[1234]
.[0-39]
ist dasselbe wie[01239]
.
Sie können den Zeichensatz mit Caret ^
ergänzen (invertieren). Symbol am Anfang einer eckigen Klammer.
[^abc]
bedeutet jedes Zeichen außer a oder b oder c .[^0-9]
bedeutet jedes Zeichen, das keine Ziffer ist.
.
- Punkt
Ein Punkt entspricht jedem einzelnen Zeichen (außer Newline '\n'
).
Ausdruck | String | Übereinstimmung? |
---|---|---|
.. | a | Keine Übereinstimmung |
ac | 1 Übereinstimmung | |
acd | 1 Übereinstimmung | |
acde | 2 Übereinstimmungen (enthält 4 Zeichen) |
^
- Pfeil
Das Caret-Symbol ^
wird verwendet, um zu prüfen, ob eine Zeichenkette mit beginnt ein bestimmtes Zeichen.
Ausdruck | String | Übereinstimmung? |
---|---|---|
^a | a | 1 Übereinstimmung |
abc | 1 Übereinstimmung | |
bac | Keine Übereinstimmung | |
^ab | abc | 1 Übereinstimmung |
acb | Keine Übereinstimmung (beginnt mit a aber nicht gefolgt von b ) |
$
- Dollar
Das Dollarzeichen $
wird verwendet, um zu prüfen, ob eine Zeichenkette mit endet ein bestimmtes Zeichen.
Ausdruck | String | Übereinstimmung? |
---|---|---|
a$ | a | 1 Übereinstimmung |
formula | 1 Übereinstimmung | |
cab | Keine Übereinstimmung |
*
- Stern
Das Sternsymbol *
stimmt mit null oder mehr Vorkommen überein des ihm überlassenen Musters.
Ausdruck | String | Übereinstimmung? |
---|---|---|
ma*n | mn | 1 Übereinstimmung |
man | 1 Übereinstimmung | |
maaan | 1 Übereinstimmung | |
main | Keine Übereinstimmung (a folgt nicht n ) | |
woman | 1 Übereinstimmung |
+
- Plus
Das Pluszeichen +
stimmt mit einem oder mehreren Vorkommen überein des ihm überlassenen Musters.
Ausdruck | String | Übereinstimmung? |
---|---|---|
ma+n | mn | Keine Übereinstimmung (kein a Zeichen) |
man | 1 Übereinstimmung | |
maaan | 1 Übereinstimmung | |
main | Keine Übereinstimmung (auf a folgt kein n) | |
woman | 1 Übereinstimmung |
?
- Fragezeichen
Das Fragezeichensymbol ?
entspricht null oder einem Vorkommen des ihm überlassenen Musters.
Ausdruck | String | Übereinstimmung? |
---|---|---|
ma?n | mn | 1 Übereinstimmung |
man | 1 Übereinstimmung | |
maaan | Keine Übereinstimmung (mehr als ein a Zeichen) | |
main | Keine Übereinstimmung (auf a folgt kein n) | |
woman | 1 Übereinstimmung |
{}
- Klammern
Betrachten Sie diesen Code:{n,m}
. Das bedeutet mindestens n , und höchstens m Wiederholungen des ihm überlassenen Musters.
Ausdruck | String | Übereinstimmung? |
---|---|---|
a{2,3} | abc dat | Keine Übereinstimmung |
abc daat | 1 Übereinstimmung (bei daat ) | |
aabc daaat | 2 Übereinstimmungen (bei aabc und daaat ) | |
aabc daaaat | 2 Übereinstimmungen (bei aabc und daaaat ) |
Versuchen wir es mit einem weiteren Beispiel. Dieser RegEx [0-9]{2, 4}
stimmt mit mindestens 2 Ziffern, aber nicht mehr als 4 Ziffern überein
Ausdruck | String | Übereinstimmung? |
---|---|---|
[0-9]{2,4} | ab123csde | 1 Übereinstimmung (Übereinstimmung bei ab123csde ) |
12 and 345673 | 3 Übereinstimmungen (12 , 3456 , 73 ) | |
1 and 2 | Keine Übereinstimmung |
|
- Alternative
Vertikaler Strich |
wird für die Alternierung verwendet (or
Betreiber).
Ausdruck | String | Übereinstimmung? |
---|---|---|
a|b | cde | Keine Übereinstimmung |
ade | 1 Übereinstimmung (Übereinstimmung bei ade ) | |
acdbea | 3 Übereinstimmungen (bei acdbea ) |
Hier, a|b
jede Zeichenfolge finden, die entweder a enthält oder b
()
- Gruppe
Klammern ()
wird verwendet, um Untermuster zu gruppieren. Beispiel:(a|b|c)xz
Übereinstimmung mit jeder Zeichenfolge, die mit a übereinstimmt oder b oder c gefolgt von xz
Ausdruck | String | Übereinstimmung? |
---|---|---|
(a|b|c)xz | ab xz | Keine Übereinstimmung |
abxz | 1 Übereinstimmung (Übereinstimmung bei abxz ) | |
axz cabxz | 2 Übereinstimmungen (bei axzbc cabxz ) |
\
- Backslash
Spiel \
wird verwendet, um verschiedene Zeichen zu maskieren, einschließlich aller Metazeichen. Zum Beispiel
\$a
übereinstimmen, wenn ein String $
enthält gefolgt von a
. Hier, $
wird von einer RegEx-Engine nicht auf besondere Weise interpretiert.
Wenn Sie sich nicht sicher sind, ob ein Zeichen eine besondere Bedeutung hat oder nicht, können Sie \
eingeben vor. Dadurch wird sichergestellt, dass das Zeichen nicht besonders behandelt wird.
Spezielle Sequenzen
Spezielle Sequenzen erleichtern das Schreiben häufig verwendeter Muster. Hier ist eine Liste spezieller Sequenzen:
\A
- Stimmt überein, wenn die angegebenen Zeichen am Anfang einer Zeichenfolge stehen.
Ausdruck | String | Übereinstimmung? |
---|---|---|
\Athe | the sun | Übereinstimmung |
In the sun | Keine Übereinstimmung |
\b
- Entspricht, wenn die angegebenen Zeichen am Anfang oder am Ende eines Wortes stehen.
Ausdruck | String | Übereinstimmung? |
---|---|---|
\bfoo | football | Übereinstimmung |
a football | Übereinstimmung | |
afootball | Keine Übereinstimmung | |
foo\b | the foo | Übereinstimmung |
the afoo test | Übereinstimmung | |
the afootest | Keine Übereinstimmung |
\B
- Gegenteil von \b
. Stimmt überein, wenn die angegebenen Zeichen nicht sind am Anfang oder Ende eines Wortes.
Ausdruck | String | Übereinstimmung? |
---|---|---|
\Bfoo | football | Keine Übereinstimmung |
a football | Keine Übereinstimmung | |
afootball | Übereinstimmung | |
foo\B | the foo | Keine Übereinstimmung |
the afoo test | Keine Übereinstimmung | |
the afootest | Übereinstimmung |
\d
- Stimmt mit jeder Dezimalziffer überein. Äquivalent zu [0-9]
Ausdruck | String | Übereinstimmung? |
---|---|---|
\d | 12abc3 | 3 Übereinstimmungen (bei 12abc3 ) |
Python | Keine Übereinstimmung |
\D
- Stimmt mit jeder Nicht-Dezimalziffer überein. Entspricht [^0-9]
Ausdruck | String | Übereinstimmung? |
---|---|---|
\D | 1ab34"50 | 3 Übereinstimmungen (bei 1ab34"50 ) |
1345 | Keine Übereinstimmung |
\s
- Übereinstimmungen, bei denen eine Zeichenfolge ein beliebiges Leerzeichen enthält. Äquivalent zu [ \t\n\r\f\v]
.
Ausdruck | String | Übereinstimmung? |
---|---|---|
\s | Python RegEx | 1 Übereinstimmung |
PythonRegEx | Keine Übereinstimmung |
\S
- Übereinstimmungen, bei denen eine Zeichenfolge ein Nicht-Leerzeichen enthält. Äquivalent zu [^ \t\n\r\f\v]
.
Ausdruck | String | Übereinstimmung? |
---|---|---|
\S | a b | 2 Übereinstimmungen (bei a b ) |
| Keine Übereinstimmung |
\w
- Entspricht jedem alphanumerischen Zeichen (Ziffern und Buchstaben). Entspricht [a-zA-Z0-9_]
. Unterstreichen Sie übrigens _
wird auch als alphanumerisches Zeichen angesehen.
Ausdruck | String | Übereinstimmung? |
---|---|---|
\w | 12&": ;c | 3 Übereinstimmungen (bei 12&": ;c ) |
%"> ! | Keine Übereinstimmung |
\W
- Stimmt mit jedem nicht-alphanumerischen Zeichen überein. Entspricht [^a-zA-Z0-9_]
Ausdruck | String | Übereinstimmung? |
---|---|---|
\W | 1a2%c | 1 Übereinstimmung (bei 1a2%c ) |
Python | Keine Übereinstimmung |
\Z
- Stimmt überein, wenn die angegebenen Zeichen am Ende einer Zeichenfolge stehen.
Ausdruck | String | Übereinstimmung? |
---|---|---|
Python\Z | I like Python | 1 Übereinstimmung |
I like Python Programming | Keine Übereinstimmung | |
Python is fun. | Keine Übereinstimmung |
Tipp: Zum Erstellen und Testen regulärer Ausdrücke können Sie RegEx-Tester-Tools wie regex101 verwenden. Dieses Tool hilft Ihnen nicht nur beim Erstellen regulärer Ausdrücke, sondern auch beim Erlernen.
Nachdem Sie nun die Grundlagen von RegEx verstanden haben, wollen wir besprechen, wie Sie RegEx in Ihrem Python-Code verwenden.
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, um mit RegEx zu arbeiten.
re.findall()
Das re.findall()
-Methode gibt eine Liste von Zeichenfolgen zurück, die alle Übereinstimmungen enthält.
Beispiel 1:re.findall()
# Program to extract numbers from a string
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()
Das re.split
-Methode teilt die Zeichenfolge, wo es eine Übereinstimmung gibt, und gibt eine Liste von Zeichenfolgen zurück, bei denen die Teilungen 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 den ursprünglichen String enthält.
Sie können maxsplit
bestehen Argument für re.split()
Methode. Dies ist die maximale Anzahl von Splits, die auftreten.
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; also alle möglichen Splits.
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 replace ersetzt werden Variable.
Beispiel 3:re.sub()
# Program to remove all 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.sub(pattern, replace, string)
print(new_string)
# Output: abc12de23f456
Wenn das Muster nicht gefunden wird, re.sub()
gibt den ursprünglichen String zurück.
Sie können count übergeben als vierter Parameter zu re.sub()
Methode. Wenn es weggelassen wird, ergibt es 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()
Das re.subn()
ist ähnlich wie re.sub()
außer dass es ein Tupel von 2 Elementen zurückgibt, das die neue Zeichenfolge und die Anzahl der vorgenommenen Ersetzungen enthält.
Beispiel 4:re.subn()
# Program to remove all 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()
Der re.search()
-Methode nimmt zwei Argumente entgegen:ein Muster und einen String. Die Methode sucht nach der ersten Stelle, an der das RegEx-Muster eine Übereinstimmung mit der Zeichenfolge erzeugt.
Wenn die Suche erfolgreich ist, re.search()
gibt ein Übereinstimmungsobjekt zurück; wenn nicht, wird None
zurückgegeben .
match = re.search(pattern, str)
Beispiel 5:re.search()
import re
string = "Python is fun"
# check if 'Python' is at the beginning
match = re.search('\APython', string)
if match:
print("pattern found inside the string")
else:
print("pattern not found")
# Output: pattern found inside the string
Hier Übereinstimmung enthält ein Übereinstimmungsobjekt.
Objekt abgleichen
Sie können Methoden und Attribute eines Match-Objekts mit der dir()-Funktion abrufen.
Einige der häufig verwendeten Methoden und Attribute von Match-Objekten sind:
match.group()
Der group()
Die Methode gibt den Teil der Zeichenfolge zurück, in dem es eine Übereinstimmung gibt.
Beispiel 6:Übereinstimmungsobjekt
import re
string = '39801 356, 2102 1111'
# Three digit number followed by space followed by two digit number
pattern = '(\d{3}) (\d{2})'
# match variable contains a Match object.
match = re.search(pattern, string)
if match:
print(match.group())
else:
print("pattern not found")
# Output: 801 35
Hier Übereinstimmung 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 Zeichenfolge 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() und match.span()
Der start()
Die Funktion gibt den Index des Anfangs der übereinstimmenden Teilzeichenfolge zurück. Ebenso end()
gibt den Endindex des übereinstimmenden Teilstrings zurück.
>>> match.start()
2
>>> match.end()
8
Der span()
Die Funktion gibt ein Tupel zurück, das den Start- und Endindex des übereinstimmenden Teils enthält.
>>> match.span()
(2, 8)
match.re und match.string
Der re
-Attribut eines übereinstimmenden Objekts gibt ein reguläres Ausdrucksobjekt zurück. Ebenso string
Das 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 behandelt, die in re
definiert sind Modul. Wenn Sie mehr erfahren möchten, besuchen Sie das Python 3 re-Modul.
Verwendung des r-Präfixes vor RegEx
Wenn r oder R Präfix wird vor einem regulären Ausdruck verwendet, es bedeutet eine rohe Zeichenfolge. Beispiel:'\n'
ist eine neue Zeile, während r'\n'
bedeutet zwei Zeichen:ein Backslash \
gefolgt von n
.
Spiel \
wird verwendet, um verschiedene Zeichen zu maskieren, einschließlich aller Metazeichen. Allerdings mit r Präfix macht \
als normales Zeichen behandeln.
Beispiel 7:Rohstring mit r-Präfix
import re
string = '\n and \r are escape sequences.'
result = re.findall(r'[\n\r]', string)
print(result)
# Output: ['\n', '\r']
Python