re — proste wyrażenia regularne

Ten moduł implementuje operacje na wyrażeniach regularnych. Obsługiwana składnia wyrażeń regularnych jest podzbiorem modułu re z CPythona (a w praktyce jest podzbiorem rozszerzonych wyrażeń regularnych POSIX).

Obsługiwane operatory i sekwencje specjalne to:

.

Dopasowuje dowolny znak.

[...]

Dopasowuje zbiór znaków. Obsługiwane są pojedyncze znaki oraz zakresy, w tym zbiory zanegowane (np. [^a-c]).

^

Dopasowuje początek łańcucha znaków.

$

Dopasowuje koniec łańcucha znaków.

?

Dopasowuje zero lub jedno wystąpienie poprzedniego podwzorca.

*

Dopasowuje zero lub więcej wystąpień poprzedniego podwzorca.

+

Dopasowuje jedno lub więcej wystąpień poprzedniego podwzorca.

??

Niezachłanna wersja ?, dopasowuje zero lub jedno wystąpienie, preferując zero.

*?

Niezachłanna wersja *, dopasowuje zero lub więcej wystąpień, preferując najkrótsze dopasowanie.

+?

Niezachłanna wersja +, dopasowuje jedno lub więcej wystąpień, preferując najkrótsze dopasowanie.

|

Dopasowuje podwzorzec po lewej albo po prawej stronie tego operatora.

(...)

Grupowanie. Każda grupa jest przechwytująca (przechwycony podłańcuch można uzyskać metodą match.group()).

(?:...)

Grupowanie nieprzechwytujące. Każda grupa jest dopasowywana według tych samych reguł co zwykłe grupowanie, ale nie staje się częścią obiektu dopasowania.

\d

Dopasowuje cyfrę. Równoważne [0-9].

\D

Dopasowuje znak niebędący cyfrą. Równoważne [^0-9].

\s

Dopasowuje biały znak. Równoważne [ \t-\r].

\S

Dopasowuje znak niebędący białym znakiem. Równoważne [^ \t-\r].

\w

Dopasowuje „znaki słowne” (tylko ASCII). Równoważne [A-Za-z0-9_].

\W

Dopasowuje znaki niebędące „znakami słownymi” (tylko ASCII). Równoważne [^A-Za-z0-9_].

\

Znak ucieczki. Dowolny inny znak następujący po ukośniku wstecznym, z wyjątkiem wymienionych powyżej, jest traktowany dosłownie. Na przykład \* jest równoważne dosłownemu * (nie jest traktowane jako operator *). Należy zauważyć, że \r, \n itp. nie są obsługiwane w sposób szczególny i będą równoważne dosłownym literom r, n itd. Z tego powodu nie zaleca się używania surowych łańcuchów Pythona (r"") dla wyrażeń regularnych. Na przykład r"\r\n" użyte jako wyrażenie regularne jest równoważne "rn". Aby dopasować znak CR, po którym następuje LF, użyj "\r\n".

NIEOBSŁUGIWANE:

  • zliczane powtórzenia ({m,n})

  • nazwane grupy ((?P<name>...))

  • bardziej zaawansowane asercje (\b, \B)

  • ucieczki znaków specjalnych takie jak \r, \n - zamiast tego użyj własnego mechanizmu ucieczki Pythona

  • itd.

Przykład:

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', '', '']

Funkcje

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

Kompiluje wyrażenie regularne, zwraca obiekt regex.

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

Kompiluje regex_str i wyszukuje go w string. W przeciwieństwie do match, przeszukuje łańcuch w poszukiwaniu pierwszej pozycji pasującej do wyrażenia regularnego (która nadal może wynosić 0, jeśli wyrażenie regularne jest zakotwiczone).

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

Kompiluje regex_str i wyszukuje go w string, zastępując wszystkie dopasowania wartością replace i zwracając nowy łańcuch.

replace może być łańcuchem znaków lub funkcją. Jeśli jest łańcuchem, można użyć sekwencji ucieczki w postaci \<number> oraz \g<number>, które zostaną rozwinięte do odpowiedniej grupy (lub do pustego łańcucha dla niedopasowanych grup). Jeśli replace jest funkcją, musi przyjmować jeden argument (dopasowanie) i powinna zwracać łańcuch zastępczy.

Jeśli podano niezerową wartość count, zastępowanie zostanie przerwane po wykonaniu tylu zamian. Argument flags jest ignorowany.

Obiekty regex

Skompilowane wyrażenie regularne. Instancje tej klasy tworzy się za pomocą re.compile().

class re.regex

Obiekt skompilowanego wyrażenia regularnego zwracany przez re.compile().

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

Stosuje to skompilowane wyrażenie regularne do string, zakotwiczając je na początku obszaru wyszukiwania, i zwraca obiekt match lub None, jeśli wyrażenie regularne nie pasuje. Jest to odpowiednik skompilowanego wzorca dla funkcji match poziomu modułu i jest znacznie wydajniejszy, gdy ten sam wzorzec stosuje się do wielu łańcuchów.

Opcjonalny parametr pos podaje indeks w string, od którego ma rozpocząć się wyszukiwanie; domyślnie wynosi 0. Nie jest to całkowicie równoważne wycinaniu łańcucha; znak wzorca '^' dopasowuje się na rzeczywistym początku łańcucha oraz na pozycjach tuż po znaku nowej linii, ale niekoniecznie na indeksie, od którego ma rozpocząć się wyszukiwanie.

Opcjonalny parametr endpos ogranicza, jak daleko przeszukiwany jest string; zachowanie będzie takie, jakby łańcuch miał endpos znaków długości, więc przeszukiwane są tylko znaki od pos do endpos - 1. Jeśli endpos wynosi None (wartość domyślna), przeszukiwany jest cały łańcuch.

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

Skanuje string w poszukiwaniu pierwszego miejsca, w którym to skompilowane wyrażenie regularne daje dopasowanie, i zwraca obiekt match lub None, jeśli żadna pozycja nie pasuje. Jest to odpowiednik skompilowanego wzorca dla funkcji search() poziomu modułu i jest znacznie wydajniejszy, gdy ten sam wzorzec stosuje się do wielu łańcuchów.

Opcjonalny parametr pos podaje indeks w string, od którego ma rozpocząć się wyszukiwanie; domyślnie wynosi 0. Nie jest to całkowicie równoważne wycinaniu łańcucha; znak wzorca '^' dopasowuje się na rzeczywistym początku łańcucha oraz na pozycjach tuż po znaku nowej linii, ale niekoniecznie na indeksie, od którego ma rozpocząć się wyszukiwanie.

Opcjonalny parametr endpos ogranicza, jak daleko przeszukiwany jest string; zachowanie będzie takie, jakby łańcuch miał endpos znaków długości, więc przeszukiwane są tylko znaki od pos do endpos - 1. Jeśli endpos wynosi None (wartość domyślna), przeszukiwany jest cały łańcuch.

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

Wyszukuje to skompilowane wyrażenie regularne w string, zastępując wszystkie dopasowania wartością replace i zwraca nowy łańcuch. Jest to odpowiednik skompilowanego wzorca dla funkcji sub() poziomu modułu i jest znacznie wydajniejszy, gdy ten sam wzorzec stosuje się do wielu łańcuchów.

replace może być łańcuchem znaków lub funkcją. Jeśli jest łańcuchem, można użyć sekwencji ucieczki w postaci \<number> oraz \g<number>, które zostaną rozwinięte do odpowiedniej grupy (lub do pustego łańcucha dla niedopasowanych grup). Jeśli replace jest funkcją, musi przyjmować jeden argument (dopasowanie) i powinna zwracać łańcuch zastępczy.

Jeśli podano niezerową wartość count, zastępowanie zostanie przerwane po wykonaniu tylu zamian. Argument flags jest ignorowany.

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

Dzieli string za pomocą wyrażenia regularnego. Jeśli podano max_split, określa on maksymalną liczbę podziałów do wykonania. Zwraca listę łańcuchów (jeśli podano, może być do max_split+1 elementów).

Obiekty dopasowania

Obiekt dopasowania przechowuje wynik udanego dopasowania.

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

Dopasowuje regex_str do string, zakotwiczając na początku łańcucha, i zwraca obiekt dopasowania lub None, jeśli nie pasuje. Jest to skrót poziomu modułu: re.match(regex_str, string) jest równoważne re.compile(regex_str).match(string).

Ten sam obiekt dopasowania jest również zwracany przez search(), przez metody skompilowanego wzorca regex.match() / regex.search(), oraz przekazywany do funkcji zastępującej używanej przez sub().

group(index: int) str

Zwraca dopasowany (pod)łańcuch. index wynosi 0 dla całego dopasowania, 1 i więcej dla każdej grupy przechwytującej. Obsługiwane są tylko grupy numeryczne.