re — einfache reguläre Ausdrücke

Dieses Modul implementiert Operationen für reguläre Ausdrücke. Die unterstützte Syntax für reguläre Ausdrücke ist eine Teilmenge des CPython-Moduls re (und tatsächlich eine Teilmenge der erweiterten regulären Ausdrücke nach POSIX).

Unterstützte Operatoren und Spezialsequenzen sind:

.

Passt auf ein beliebiges Zeichen.

[...]

Passt auf eine Menge von Zeichen. Einzelne Zeichen und Bereiche werden unterstützt, einschließlich negierter Mengen (z. B. [^a-c]).

^

Passt auf den Anfang der Zeichenkette.

$

Passt auf das Ende der Zeichenkette.

?

Passt auf null oder eins des vorherigen Teilmusters.

*

Passt auf null oder mehr des vorherigen Teilmusters.

+

Passt auf eins oder mehr des vorherigen Teilmusters.

??

Nicht-gierige Version von ?, passt auf null oder eins, mit Vorzug für null.

*?

Nicht-gierige Version von *, passt auf null oder mehr, mit Vorzug für die kürzeste Übereinstimmung.

+?

Nicht-gierige Version von +, passt auf eins oder mehr, mit Vorzug für die kürzeste Übereinstimmung.

|

Passt entweder auf das linke oder das rechte Teilmuster dieses Operators.

(...)

Gruppierung. Jede Gruppe ist erfassend (eine erfasste Teilkette kann mit der Methode match.group() abgerufen werden).

(?:...)

Nicht-erfassende Gruppierung. Jede Gruppe wird nach denselben Regeln wie bei der regulären Gruppierung abgeglichen, ist aber nicht Teil des Match-Objekts.

\d

Passt auf eine Ziffer. Entspricht [0-9].

\D

Passt auf eine Nicht-Ziffer. Entspricht [^0-9].

\s

Passt auf Leerraum. Entspricht [ \t-\r].

\S

Passt auf Nicht-Leerraum. Entspricht [^ \t-\r].

\w

Passt auf „Wortzeichen“ (nur ASCII). Entspricht [A-Za-z0-9_].

\W

Passt auf Nicht-„Wortzeichen“ (nur ASCII). Entspricht [^A-Za-z0-9_].

\

Escape-Zeichen. Jedes andere Zeichen, das auf den Backslash folgt und nicht oben aufgeführt ist, wird wörtlich genommen. Zum Beispiel ist \* gleichbedeutend mit dem wörtlichen * (es wird nicht als Operator * behandelt). Beachten Sie, dass \r, \n usw. nicht speziell behandelt werden und gleichbedeutend mit den wörtlichen Buchstaben r, n usw. sind. Aus diesem Grund wird davon abgeraten, rohe Python-Zeichenketten (r"") für reguläre Ausdrücke zu verwenden. Zum Beispiel ist r"\r\n" als regulärer Ausdruck verwendet gleichbedeutend mit "rn". Um auf ein CR-Zeichen gefolgt von LF zu passen, verwenden Sie "\r\n".

NICHT UNTERSTÜTZT:

  • gezählte Wiederholungen ({m,n})

  • benannte Gruppen ((?P<name>...))

  • fortgeschrittenere Assertionen (\b, \B)

  • Escapes für Sonderzeichen wie \r, \n - verwenden Sie stattdessen das eigene Escaping von Python

  • usw.

Beispiel:

import re

# As re doesn't support escapes itself, use of r"" strings is not
# recommended.
regex = re.compile("[\r\n]")

regex.split("line1\rline2\nline3\r\n")

# Result:
# ['line1', 'line2', 'line3', '', '']

Funktionen

re.compile(regex_str: str, flags: int = 0) 'regex'

Kompiliert den regulären Ausdruck und gibt ein regex-Objekt zurück.

re.search(regex_str: str, string: str) 'match | None'

Kompiliert regex_str und sucht danach in einer string. Anders als match durchsucht dies die Zeichenkette nach der ersten Position, die auf den regulären Ausdruck passt (die immer noch 0 sein kann, wenn der reguläre Ausdruck verankert ist).

re.sub(regex_str: str, replace: str | Callable, string: str, count: int = 0, flags: int = 0, /) str

Kompiliert regex_str und sucht danach in string, ersetzt alle Übereinstimmungen durch replace und gibt die neue Zeichenkette zurück.

replace kann eine Zeichenkette oder eine Funktion sein. Wenn es eine Zeichenkette ist, können Escape-Sequenzen der Form \<number> und \g<number> verwendet werden, um auf die entsprechende Gruppe zu expandieren (oder eine leere Zeichenkette für nicht passende Gruppen). Wenn replace eine Funktion ist, muss sie ein einzelnes Argument (die Übereinstimmung) annehmen und sollte eine Ersatzzeichenkette zurückgeben.

Wenn count angegeben und ungleich null ist, stoppt die Ersetzung, nachdem so viele Ersetzungen vorgenommen wurden. Das Argument flags wird ignoriert.

Regex-Objekte

Kompilierter regulärer Ausdruck. Instanzen dieser Klasse werden mit re.compile() erstellt.

class re.regex

Kompiliertes Regex-Objekt, das von re.compile() zurückgegeben wird.

match(string: str, pos: int = 0, endpos: int | None = None) 'match | None'

Wendet diesen kompilierten regulären Ausdruck auf string an, verankert am Anfang des Suchbereichs, und gibt ein match-Objekt zurück, oder None, wenn der reguläre Ausdruck nicht passt. Dies ist das Äquivalent zum modulebenen match für kompilierte Muster und ist deutlich effizienter, wenn dasselbe Muster auf mehrere Zeichenketten angewendet wird.

Der optionale Parameter pos gibt einen Index in string an, an dem die Suche beginnen soll; standardmäßig ist er 0. Dies ist nicht vollständig gleichbedeutend mit dem Slicen der Zeichenkette; das Musterzeichen '^' passt am tatsächlichen Anfang der Zeichenkette und an Positionen direkt nach einem Zeilenumbruch, aber nicht notwendigerweise an dem Index, an dem die Suche beginnen soll.

Der optionale Parameter endpos begrenzt, wie weit string durchsucht wird; es ist so, als wäre die Zeichenkette endpos Zeichen lang, sodass nur die Zeichen von pos bis endpos - 1 durchsucht werden. Wenn endpos None ist (der Standardwert), wird die gesamte Zeichenkette durchsucht.

search(string: str, pos: int = 0, endpos: int | None = None) 'match | None'

Durchsucht string nach der ersten Stelle, an der dieser kompilierte reguläre Ausdruck eine Übereinstimmung erzeugt, und gibt ein match-Objekt zurück, oder None, wenn keine Position passt. Dies ist das Äquivalent zur modulebenen Funktion search() für kompilierte Muster und ist deutlich effizienter, wenn dasselbe Muster auf mehrere Zeichenketten angewendet wird.

Der optionale Parameter pos gibt einen Index in string an, an dem die Suche beginnen soll; standardmäßig ist er 0. Dies ist nicht vollständig gleichbedeutend mit dem Slicen der Zeichenkette; das Musterzeichen '^' passt am tatsächlichen Anfang der Zeichenkette und an Positionen direkt nach einem Zeilenumbruch, aber nicht notwendigerweise an dem Index, an dem die Suche beginnen soll.

Der optionale Parameter endpos begrenzt, wie weit string durchsucht wird; es ist so, als wäre die Zeichenkette endpos Zeichen lang, sodass nur die Zeichen von pos bis endpos - 1 durchsucht werden. Wenn endpos None ist (der Standardwert), wird die gesamte Zeichenkette durchsucht.

sub(replace: str | Callable, string: str, count: int = 0, flags: int = 0, /) str

Sucht nach diesem kompilierten regulären Ausdruck in string, ersetzt alle Übereinstimmungen durch replace und gibt die neue Zeichenkette zurück. Dies ist das Äquivalent zur modulebenen Funktion sub() für kompilierte Muster und ist deutlich effizienter, wenn dasselbe Muster auf mehrere Zeichenketten angewendet wird.

replace kann eine Zeichenkette oder eine Funktion sein. Wenn es eine Zeichenkette ist, können Escape-Sequenzen der Form \<number> und \g<number> verwendet werden, um auf die entsprechende Gruppe zu expandieren (oder eine leere Zeichenkette für nicht passende Gruppen). Wenn replace eine Funktion ist, muss sie ein einzelnes Argument (die Übereinstimmung) annehmen und sollte eine Ersatzzeichenkette zurückgeben.

Wenn count angegeben und ungleich null ist, stoppt die Ersetzung, nachdem so viele Ersetzungen vorgenommen wurden. Das Argument flags wird ignoriert.

split(string: str, max_split: int = -1, /) List[str]

Teilt eine string anhand eines regulären Ausdrucks auf. Wenn max_split angegeben ist, gibt es die maximale Anzahl der durchzuführenden Teilungen an. Gibt eine Liste von Zeichenketten zurück (es können bis zu max_split+1 Elemente sein, wenn es angegeben ist).

Match-Objekte

Ein Match-Objekt enthält das Ergebnis einer erfolgreichen Übereinstimmung.

class re.match(regex_str: str, string: str)

Gleicht regex_str gegen string ab, verankert am Anfang der Zeichenkette, und gibt ein Match-Objekt zurück, oder None, wenn es nicht passt. Dies ist die Abkürzung auf Modulebene: re.match(regex_str, string) ist gleichbedeutend mit re.compile(regex_str).match(string).

Dasselbe Match-Objekt wird auch von search(), von den Methoden regex.match() / regex.search() für kompilierte Muster zurückgegeben und an die von sub() verwendete Ersatzfunktion übergeben.

group(index: int) str

Gibt die passende (Teil-)Zeichenkette zurück. index ist 0 für die gesamte Übereinstimmung, 1 und höher für jede erfassende Gruppe. Es werden nur numerische Gruppen unterstützt.