English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
在本教程中,您将学习正则表达式(RegEx),并使用Python的re模块与RegEx一起使用(在示例的帮助下)。
^a...s$
上面的代码定义了RegEx模式。模式是:mita开头并以s结尾的任何五个字母字符串Python
使用RegEx定义的模式可用于与字符串匹配。
Ausdruck | Zeichenkette | Passen? |
---|---|---|
^a...s$ | abs | Keine Übereinstimmung |
alias | Passen | |
abyss | Passen | |
Alias | Keine Übereinstimmung | |
An abacus | Keine Übereinstimmung |
Python有一个名为reRegEx 的模块。这是一个示例:
import re pattern = '^a...s$' test_string = 'abyss' result = re.match(pattern, test_string) if result: print("查找成功.") else: print("查找不成功.")
这里,我们使用re.match()函数来搜索测试字符串中的模式。如果搜索成功,该方法将返回一个匹配对象。如果没有,则返回None。
re模块中定义了其他一些函数,可与RegEx一起使用。在探讨之前,让我们学习正则表达式本身。
如果您已经了解RegEx的基础知识,请跳至Python RegExPython
为了指定正则表达式,使用了元字符。在上面的示例中,^和$是元字符。
Meta-Zeichen sind Zeichen, die von dem RegEx-Engine auf spezielle Weise interpretiert werden. Hier ist eine Liste der Meta-Zeichen:
[] . ^ $ * + ? {} () \ |
[] - Die eckigen Klammern
Die eckigen Klammern spezifizieren die Gruppe der Zeichen, die Sie uebereinstimmen moechten.
Ausdruck | Zeichenkette | Passen? |
---|---|---|
[abc] | a | 1Übereinstimmungen |
ac | 2Übereinstimmungen | |
Hey Jude | Keine Übereinstimmung | |
abc de ca | 5Übereinstimmungen |
Hierbei wird [abc] entsprechen, wenn Sie eine Zeichenfolge enthalten moechten, die
Sie koennen auch-Zeichen im eckigen Klammern umfassen.
[a-e] ist gleich [abcde].
[1-4] ist gleich [1234]
[0-39] ist gleich [01239]
Sie koennen das Einfuehrungszeichen ^ am Anfang der eckigen Klammern verwenden, um das Zeichensatz (umgekehrt) zu ergaenzen.
[^abc] bedeutet außeraVerwenden Sie den Präfix r, um den Raw-String vor dem RegEx zu verwendenbVerwenden Sie den Präfix r, um den Raw-String vor dem RegEx zu verwendencaußerderjedes Zeichen.
[^0-9] bedeutet jede nicht-numerische Zeichenklasse.
.- Das Punktzeichen
Das Punktzeichen entspricht jedem einzelnen Zeichen (außer dem Zeilenumbruch '\n').
Ausdruck | Zeichenkette | Passen? |
---|---|---|
.. | a | Keine Übereinstimmung |
ac | 1Übereinstimmungen | |
acd | 1Übereinstimmungen | |
acde | 2einer Übereinstimmung (enthaelt)4Zeichen) |
^- Das Einfuehrungszeichen
Das Einfuehrungszeichen ^ wird verwendet, um zu ueberpruefen, ob ein String
Ausdruck | Zeichenkette | Passen? |
---|---|---|
^a | a | 1Übereinstimmungen |
abc | 1Übereinstimmungen | |
bac | Keine Übereinstimmung | |
^ab | abc | 1Übereinstimmungen |
acb | keine Übereinstimmung (beginnt mit, a gefolgt von, aber ohne b) |
$- Das Dollarzeichen
Das Dollarzeichen $ wird verwendet, um zu überprüfen, ob ein Stringmiteinem bestimmten ZeichenEndePython
Ausdruck | Zeichenkette | Passen? |
---|---|---|
a$ | a | 1Übereinstimmungen |
formel | 1Übereinstimmungen | |
cab | Keine Übereinstimmung |
*- Das Sternchen
Das Sternchen-Symbol*Passenkeine oder mehreredes verbleibenden Musters.
Ausdruck | Zeichenkette | Passen? |
---|---|---|
ma*n | mn | 1Übereinstimmungen |
man | 1Übereinstimmungen | |
maaan | 1Übereinstimmungen | |
main | keine Übereinstimmung (kein n nach a) | |
woman | 1Übereinstimmungen |
+- Das Pluszeichen
Das Pluszeichen wird+Passenein oder mehreredes verbleibenden Musters.
Ausdruck | Zeichenkette | Passen? |
---|---|---|
ma+n | mn | keine Übereinstimmung (kein a-Buchstabe) |
man | 1Übereinstimmungen | |
maaan | 1Übereinstimmungen | |
main | keine Übereinstimmung (a gefolgt von n) | |
woman | 1Übereinstimmungen |
?- Das Fragezeichen
Das Fragezeichen ? wirdkeine oder einmaldes verbleibenden Musters.
Ausdruck | Zeichenkette | Passen? |
---|---|---|
ma?n | mn | 1Übereinstimmungen |
man | 1Übereinstimmungen | |
maaan | keine Übereinstimmung (mehr als einen a-Buchstaben) | |
main | keine Übereinstimmung (a gefolgt von n) | |
woman | 1Übereinstimmungen |
{}- Klammern
Betrachten Sie folgenden Code: {n,m}. Dies bedeutet, dass mindestensn-malMuster, und höchstensm-malMuster.
Ausdruck | Zeichenkette | Passen? |
---|---|---|
a{2)3} | abc dat | Keine Übereinstimmung |
abc daat | 1einer Übereinstimmung (in) daat | |
aabc daaat | 2einer Übereinstimmung (Position)aabc und) daaat | |
aabc daaaat | 2einer Übereinstimmung (Position)aabc und) daaaat |
Lassen Sie uns noch einen Beispielversuch durchführen. RegEx [0-9]{2) 4} entspricht mindestens2Stellen, aber nicht mehr als4Stelle
Ausdruck | Zeichenkette | Passen? |
---|---|---|
[0-9]{2)4} | ab123csde | 1einer Übereinstimmung (Übereinstimmung an) ab123csde |
12 und 345673 | 2Übereinstimmungen (im)12 und 345673 | |
1 und 2 | Keine Übereinstimmung |
|- Der vertikale Strich
Der vertikale Strich | wird verwendet, um Alternativen anzuzeigen (oder-Operator).
Ausdruck | Zeichenkette | Passen? |
---|---|---|
a|b | cde | Keine Übereinstimmung |
ade | 1einer Übereinstimmung (Übereinstimmung an)ade) | |
acdbea | 3Übereinstimmungen (im)acdbea |
Hierbei entspricht a|b jedem, deraVerwenden Sie den Präfix r, um den Raw-String vor dem RegEx zu verwendenb'sZeichenkette
()- Klammern
Klammern () werden verwendet, um Teilmuster zu gruppieren. Zum Beispiel, (a|b|c)xz entspricht jeder mitaVerwenden Sie den Präfix r, um den Raw-String vor dem RegEx zu verwendenbVerwenden Sie den Präfix r, um den Raw-String vor dem RegEx zu verwendencPassen und gefolgt vonvon xzZeichenkette
Ausdruck | Zeichenkette | Passen? |
---|---|---|
(a|b|c)xz | ab xz | Keine Übereinstimmung |
abxz | 1Übereinstimmungen (im Ort übereinstimmen) abxz | |
axz cabxz | 2Übereinstimmungen (im)axzbc cabxz |
\- Backslash
Der Backslash \ wird verwendet, um verschiedene Zeichen zu escapen, einschließlich aller Metazeichen. Zum Beispiel
\$a Wenn die Zeichenkette $ gefolgt von a enthält, wird übereinstimmen. Hier wird der $-RegEx-Engine nicht auf eine spezielle Weise interpretiert.
Wenn unklar ist, ob ein Zeichen eine spezielle Bedeutung hat, kann es vor dem \ setzen. Dies stellt sicher, dass das Zeichen nicht speziell behandelt wird.
Spezielle Sequenzen
Spezielle Sequenzen machen häufige Muster einfacher zu schreiben. Hier ist eine Liste der speziellen Sequenzen:
\A -wird übereinstimmen, wenn der angegebene Zeichen am Anfang der Zeichenkette steht.
Ausdruck | Zeichenkette | Passen? |
---|---|---|
\Athe | die Sonne | Passen |
In der Sonne | Keine Übereinstimmung |
\b -am Anfang oder am Ende eines Wortes, dann wird übereinstimmen.
Ausdruck | Zeichenkette | Passen? |
---|---|---|
\bfoo | football | Passen |
a football | Passen | |
afootball | Keine Übereinstimmung | |
foo\b | the foo | Passen |
the afoo test | Passen | |
the afootest | Keine Übereinstimmung |
\B-mit \b. Wenn der angegebene Zeichennichtam Anfang oder am Ende eines Wortes, dann wird übereinstimmen.
Ausdruck | Zeichenkette | Passen? |
---|---|---|
\Bfoo | football | Keine Übereinstimmung |
a football | Keine Übereinstimmung | |
afootball | Passen | |
foo\B | the foo | Keine Übereinstimmung |
the afoo test | Keine Übereinstimmung | |
the afootest | Passen |
\d-Passen auf alle dezimalen Ziffern. Entspricht [0-9]
Ausdruck | Zeichenkette | Passen? |
---|---|---|
\d | 12abc3 | 3Übereinstimmungen (im)12abc3 |
' | Keine Übereinstimmung |
\D-Passen auf alle nicht-dezimalen Ziffern. Entspricht [^0-9]
Ausdruck | Zeichenkette | Passen? |
---|---|---|
\D | 1ab34"50 | 3Übereinstimmungen (im)1ab34"50 |
1345 | Keine Übereinstimmung |
\s-Passen auf Orte in der Zeichenkette, die leere Zeichen enthalten. Entspricht [ \t\n\r\f\v].
Ausdruck | Zeichenkette | Passen? |
---|---|---|
\s | Python RegEx | 1Übereinstimmungen |
PythonRegEx | Keine Übereinstimmung |
\S-Passen auf Orte in der Zeichenkette, die nicht-leere Zeichen enthalten. Entspricht [^ \t\n\r\f\v].
Ausdruck | Zeichenkette | Passen? |
---|---|---|
\S | a b | 2Übereinstimmungen (im) a b |
Keine Übereinstimmung |
\w-Passen auf alle alphanumerischen Zeichen (Zahlen und Buchstaben). Entspricht [a-zA-Z0-9_]. Übrigens wird das Unterstrich-_ auch als alphanumerisches Zeichen betrachtet.
Ausdruck | Zeichenkette | Passen? |
---|---|---|
\w | 12&": ;c | 3Übereinstimmungen (im)12&": ;c |
%"> ! | Keine Übereinstimmung |
\W-Passen auf alle nicht-alphabetischen und nicht-ziffernischen Zeichen. Entspricht [^a-zA-Z0-9_]
Ausdruck | Zeichenkette | Passen? |
---|---|---|
\W | 1a2%c | 1Übereinstimmungen (in)1a2%c |
' | Keine Übereinstimmung |
\Z -Es wird übereinstimmen, wenn das angegebene Zeichen am Ende der Zeichenkette steht.
Ausdruck | Zeichenkette | Passen? |
---|---|---|
\ZPython | Ich mag Python | 1Übereinstimmungen |
Ich mag Python | Keine Übereinstimmung | |
Python ist spaßig. | Keine Übereinstimmung |
Hinweis:Um reguläre Ausdrücke zu erstellen und zu testen, können Sie den RegEx-Tester verwenden, zum BeispielregexDieses Tool kann Ihnen nicht nur helfen, reguläre Ausdrücke zu erstellen, sondern auch zu lernen, wie man sie verwendet.
Nun, nachdem Sie die Grundlagen von RegEx kennen, lassen Sie uns besprechen, wie man RegEx in Python-Code verwendet.
Python hat ein Modul namens re für reguläre Ausdrücke. Um es zu verwenden, müssen wir das Modul importieren.
import re
Dieser Modul definiert einige Funktionen und Konstanten, die mit RegEx verwendet werden können.
re.findall() gibt eine Liste von Zeichenketten zurück, die alle Übereinstimmungen enthalten.
# Extract numbers from a string program import re string = 'hello 12 hi 89. Howdy 34>>> match.string pattern = '\d'+>>> match.string result = re.findall(pattern, string,) print(result) # Ausgabe: ['12', ''89', ''34]
Falls das Muster nicht gefunden wird, gibt re.findall() eine leere Liste zurück.
Die split-Methode teilt die Zeichenkette an den Übereinstimmungen und gibt eine Liste der gesplitteten Zeichenketten zurück.
import re string = 'Twelve:12 Eighty nine:89. pattern = '\d'+>>> match.string result = re.split(pattern, string,) print(result) # Ausgabe: ['Twelve:', 'Eighty nine:', '.']
Falls das Muster nicht gefunden wird, gibt re.split() eine Liste zurück, die eine leere Zeichenkette enthält.
Sie können den Parameter maxsplit an die Methode re.split() übergeben. Dies ist die maximale Anzahl der Splittungen, die vorgenommen werden sollen.
import re string = 'Twelve:12 Eighty nine:89 Nine:9. pattern = '\d'+>>> match.string # maxsplit = 1 # Split only at the first occurrence result = re.split(pattern, string,) 1) print(result) # Ausgabe: ['Twelve:', 'Eighty nine:']89 Nine:9.']
Übrigens ist der Standardwert von maxsplit 0; der Standardwert ist 0. Dies bedeutet, dass alle Ergebnisse gesplittet werden.
Syntax von re.sub():
re.sub(pattern, replace, string)
Diese Methode gibt eine Zeichenkette zurück, in der alle Übereinstimmungen durch den Inhalt der Variablen replace ersetzt werden.
# Programm zum Entfernen aller Leerzeichen import re # Mehrzeiliger String string = 'abc 12\ de 23 \n f45 6>>> match.string # Matchen aller Leerzeichen pattern = '\s+>>> match.string # Leere Zeichenkette replace = '' new_string = re.sub(pattern, replace, string) print(new_string) # Ausgabe: abc12de23f456
Falls das Muster nicht gefunden wird, gibt re.sub() die ursprüngliche Zeichenkette zurück.
Sie könnencountDieser vierte Parameter wird an die Methode re.sub() übergeben. Wird er weggelassen, beträgt das Ergebnis 0. Dies ersetzt alle Vorkommen des Musters.
import re # Mehrzeiliger String string = 'abc 12\ de 23 \n f45 6>>> match.string # Matchen aller Leerzeichen pattern = '\s+>>> match.string replace = '' new_string = re.sub(r'\s'+', replace, string, 1) print(new_string) # Ausgabe: # abc12de 23 # f45 6
re.subn() ähnelt re.sub() und wird erwartet, dass es ein Tupel zurückgibt, das2Ein Tupel mit dem neuen String und der Anzahl der durchgeführten Ersetzungen.
# Programm zum Entfernen aller Leerzeichen import re # Mehrzeiliger String string = 'abc 12\ de 23 \n f45 6>>> match.string # Matchen aller Leerzeichen pattern = '\s+>>> match.string # Leere Zeichenkette replace = '' new_string = re.subn(pattern, replace, string) print(new_string) # Ausgabe: ('abc12de23f456', 4)
Der re.search() Methode werden zwei Parameter übergeben: Muster und Zeichenkette. Diese Methode sucht nach der ersten Position, an der das RegEx-Muster mit der Zeichenkette übereinstimmt.
Wenn die Suche erfolgreich ist, gibt re.search() ein Match-Objekt zurück. Wenn nicht, gibt es None zurück.
match = re.search(pattern, str)
import re string = "Python ist spaßig" # Überprüfen, ob "Python" am Anfang ist match = re.search('\APython', string) if match: print("Muster gefunden im String") else: print("Muster nicht gefunden") # Ausgabe: Muster gefunden im String
Hier,matchenthält ein Match-Objekt.
Sie könnendir()Die Funktion erhält Methoden und Eigenschaften des Match-Objekts.
Einige gebräuchliche Methoden und Eigenschaften eines Match-Objekts sind:
Die group() Methode gibt den übereinstimmenden Teil der Zeichenkette zurück.
import re string = '39801 356) 2102 1111>>> match.string # Drei Ziffern, gefolgt von einem Leerzeichen, zwei Ziffern pattern = '(\d{3}) (\d{2})' # Das "match"-Variable enthält ein Match-Objekt. match = re.search(pattern, string) if match: print(match.group()) else: print("Muster nicht gefunden") # Ausgabe: 801 35
Hier,matchDie Variable enthält ein Match-Objekt.
Unser Muster(\d{3)) (\d{2)) haben zwei Untergruppen (\d{3)) und (\d{2))
>>> match.group(1) >>> match.string801>>> match.string >>> match.group(2) >>> match.string35>>> match.string >>> match.group(1) 2) (801', ''35) >>> match.groups() (801', ''35)
Die start()-Funktion gibt den Index des Anfangs des übereinstimmenden Teils zurück. Ebenso gibt das end()-Attribut den Index des Endes des übereinstimmenden Teils zurück.
>>> match.start() 2 >>> match.end() 8
Die span()-Funktion gibt ein Tupel mit den Anfangs- und Endindizes des übereinstimmenden Teils zurück.
>>> match.span() (2) 8)
Das re-Attribut des Match-Objekts gibt einen Regulären Ausdrucks-Objekt zurück. Ebenso gibt das string-Attribut den übergebenen String zurück.
>>> match.re re.compile('(\\d{3)2}) ) >>> match.string39801 356) 2102 1111>>> match.string
.rVerwenden Sie den Präfix r, um den Raw-String vor dem RegEx zu verwendenoderR
Der Backslash \ wird zur Flucht vieler Zeichen verwendet, einschließlich aller Metazeichen. Allerdings bedeutet der Präfix, dass es sich um einen Raw-String handelt. Zum Beispiel ist '\n' eine neue Zeile, während 'r\n' zwei Zeichen bedeutet: ein Backslash \ gefolgt von n.rDer Präfix \ wird als regulärer Zeichen gesetzt.
import re string = '\n und \r sind Escape-Sequenzen.' result = re.findall(r'[\n\r]', string) print(result) # Ausgabe: ['\n', '\r']