English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Python 基础教程

Python 流程控制

Funktionen in Python

Datentypen in Python

Python 文件操作

Python 对象和类

Python 日期和时间

Python 高级知识

Python 参考手册

Reguläre Ausdrücke (RegEx) in Python

在本教程中,您将学习正则表达式(RegEx),并使用Python的re模块与RegEx一起使用(在示例的帮助下)。

正则表达式(RegEx)是定义搜索模式的字符序列。 例如,

^a...s$

上面的代码定义了RegEx模式。模式是:mita开头并以s结尾的任何五个字母字符串Python

使用RegEx定义的模式可用于与字符串匹配。

AusdruckZeichenkettePassen?
^a...s$absKeine Übereinstimmung
aliasPassen
abyssPassen
AliasKeine Übereinstimmung
An abacusKeine Ü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

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.

AusdruckZeichenkettePassen?
[abc]a1Übereinstimmungen
ac2Übereinstimmungen
Hey JudeKeine Übereinstimmung
abc de ca5Ü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').

AusdruckZeichenkettePassen?
..aKeine Übereinstimmung
ac1Übereinstimmungen
acd1Übereinstimmungen
acde2einer Übereinstimmung (enthaelt)4Zeichen)

^- Das Einfuehrungszeichen

Das Einfuehrungszeichen ^ wird verwendet, um zu ueberpruefen, ob ein String

AusdruckZeichenkettePassen?
^aa1Übereinstimmungen
abc1Übereinstimmungen
bacKeine Übereinstimmung
^ababc1Übereinstimmungen
acbkeine Übereinstimmung (beginnt mit, a gefolgt von, aber ohne b)

$- Das Dollarzeichen

Das Dollarzeichen $ wird verwendet, um zu überprüfen, ob ein Stringmiteinem bestimmten ZeichenEndePython

AusdruckZeichenkettePassen?
a$a1Übereinstimmungen
formel1Übereinstimmungen
cabKeine Übereinstimmung

*- Das Sternchen

Das Sternchen-Symbol*Passenkeine oder mehreredes verbleibenden Musters.

AusdruckZeichenkettePassen?
ma*nmn1Übereinstimmungen
man1Übereinstimmungen
maaan1Übereinstimmungen
mainkeine Übereinstimmung (kein n nach a)
woman1Übereinstimmungen

+- Das Pluszeichen

Das Pluszeichen wird+Passenein oder mehreredes verbleibenden Musters.

AusdruckZeichenkettePassen?
ma+nmnkeine Übereinstimmung (kein a-Buchstabe)
man1Übereinstimmungen
maaan1Übereinstimmungen
mainkeine Übereinstimmung (a gefolgt von n)
woman1Übereinstimmungen

?- Das Fragezeichen

Das Fragezeichen ? wirdkeine oder einmaldes verbleibenden Musters.

AusdruckZeichenkettePassen?
ma?nmn1Übereinstimmungen
man1Übereinstimmungen
maaankeine Übereinstimmung (mehr als einen a-Buchstaben)
mainkeine Übereinstimmung (a gefolgt von n)
woman1Übereinstimmungen

{}- Klammern

Betrachten Sie folgenden Code: {n,m}. Dies bedeutet, dass mindestensn-malMuster, und höchstensm-malMuster.

AusdruckZeichenkettePassen?
a{2)3}abc datKeine Übereinstimmung
abc daat1einer Übereinstimmung (in) daat
aabc daaat2einer Übereinstimmung (Position)aabc und) daaat
aabc daaaat2einer Übereinstimmung (Position)aabc und) daaaat

Lassen Sie uns noch einen Beispielversuch durchführen. RegEx [0-9]{2) 4} entspricht mindestens2Stellen, aber nicht mehr als4Stelle

AusdruckZeichenkettePassen?
[0-9]{2)4}ab123csde1einer Übereinstimmung (Übereinstimmung an) ab123csde
12 und 3456732Übereinstimmungen (im)12 und 345673
1 und 2Keine Übereinstimmung

|- Der vertikale Strich

Der vertikale Strich | wird verwendet, um Alternativen anzuzeigen (oder-Operator).

AusdruckZeichenkettePassen?
a|bcdeKeine Übereinstimmung
ade1einer Übereinstimmung (Übereinstimmung an)ade)
acdbea3Ü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

AusdruckZeichenkettePassen?
(a|b|c)xzab xzKeine Übereinstimmung
abxz1Übereinstimmungen (im Ort übereinstimmen) abxz
axz cabxz2Ü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.

AusdruckZeichenkettePassen?
\Athedie SonnePassen
In der SonneKeine Übereinstimmung

\b -am Anfang oder am Ende eines Wortes, dann wird übereinstimmen.

AusdruckZeichenkettePassen?
\bfoofootballPassen
a footballPassen
afootballKeine Übereinstimmung
foo\bthe fooPassen
the afoo testPassen
the afootestKeine Übereinstimmung

\B-mit \b. Wenn der angegebene Zeichennichtam Anfang oder am Ende eines Wortes, dann wird übereinstimmen.

AusdruckZeichenkettePassen?
\BfoofootballKeine Übereinstimmung
a footballKeine Übereinstimmung
afootballPassen
foo\Bthe fooKeine Übereinstimmung
the afoo testKeine Übereinstimmung
the afootestPassen

\d-Passen auf alle dezimalen Ziffern. Entspricht [0-9]

AusdruckZeichenkettePassen?
\d12abc33Übereinstimmungen (im)12abc3
'Keine Übereinstimmung

\D-Passen auf alle nicht-dezimalen Ziffern. Entspricht [^0-9]

AusdruckZeichenkettePassen?
\D1ab34"503Übereinstimmungen (im)1ab34"50
1345Keine Übereinstimmung

\s-Passen auf Orte in der Zeichenkette, die leere Zeichen enthalten. Entspricht [ \t\n\r\f\v].

AusdruckZeichenkettePassen?
\sPython RegEx1Übereinstimmungen
PythonRegExKeine Übereinstimmung

\S-Passen auf Orte in der Zeichenkette, die nicht-leere Zeichen enthalten. Entspricht [^ \t\n\r\f\v].

AusdruckZeichenkettePassen?
\Sa b2Ü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.

AusdruckZeichenkettePassen?
\w12&": ;c3Übereinstimmungen (im)12&": ;c
%"> !Keine Übereinstimmung

\W-Passen auf alle nicht-alphabetischen und nicht-ziffernischen Zeichen. Entspricht [^a-zA-Z0-9_]

AusdruckZeichenkettePassen?
\W1a2%c1Übereinstimmungen (in)1a2%c
'Keine Übereinstimmung

\Z -Es wird übereinstimmen, wenn das angegebene Zeichen am Ende der Zeichenkette steht.

AusdruckZeichenkettePassen?
\ZPythonIch mag Python1Übereinstimmungen
Ich mag PythonKeine Ü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 reguläre Ausdrücke

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()

re.findall() gibt eine Liste von Zeichenketten zurück, die alle Übereinstimmungen enthalten.

Beispiel1:re.findall()

# 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.

re.split()

Die split-Methode teilt die Zeichenkette an den Übereinstimmungen und gibt eine Liste der gesplitteten Zeichenketten zurück.

Beispiel2:re.split()

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.

re.sub()

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.

Beispiel3:re.sub()

# 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()

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.

Beispiel4:re.subn()

# 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)

re.search()

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)

Beispiel5:re.search()

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:

match.group()

Die group() Methode gibt den übereinstimmenden Teil der Zeichenkette zurück.

Beispiel6:匹配对象

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)

match.start(), match.end() und match.span()

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)

match.re und match.string

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

,' 3 Wir haben alle gängigen Methoden im re-Modul vorgestellt. Wenn Sie mehr Informationen wünschen, besuchen Sie bittePython

re-Modul

.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.

Beispiel7Verwenden Sie den Präfix r für Raw-Strings

import re
string = '\n und \r sind Escape-Sequenzen.'
result = re.findall(r'[\n\r]', string) 
print(result)
# Ausgabe: ['\n', '\r']