re — jednoduché regulární výrazy#

Tento modul implementuje operace s regulárními výrazy. Podporovaná syntaxe regulárních výrazů je podmnožinou modulu re z CPythonu (a ve skutečnosti je podmnožinou rozšířených regulárních výrazů POSIX).

Podporované operátory a speciální sekvence jsou:

.

Odpovídá libovolnému znaku.

[...]

Odpovídá množině znaků. Podporovány jsou jednotlivé znaky i rozsahy, včetně negovaných množin (např. [^a-c]).

^

Odpovídá začátku řetězce.

$

Odpovídá konci řetězce.

?

Odpovídá nule nebo jednomu výskytu předchozího podvzoru.

*

Odpovídá nule nebo více výskytům předchozího podvzoru.

+

Odpovídá jednomu nebo více výskytům předchozího podvzoru.

??

Nenenasytná (non-greedy) varianta ?, odpovídá nule nebo jednomu výskytu s preferencí nuly.

*?

Nenenasytná (non-greedy) varianta *, odpovídá nule nebo více výskytům s preferencí nejkratší shody.

+?

Nenenasytná (non-greedy) varianta +, odpovídá jednomu nebo více výskytům s preferencí nejkratší shody.

|

Odpovídá buď levému, nebo pravému podvzoru tohoto operátoru.

(...)

Seskupení. Každá skupina zachytává (zachycený podřetězec lze získat metodou match.group()).

(?:...)

Nezachytávající seskupení. Každá skupina se vyhodnocuje podle stejných pravidel jako běžné seskupení, ale nebude součástí objektu shody.

\d

Odpovídá číslici. Ekvivalentní k [0-9].

\D

Odpovídá nečíslici. Ekvivalentní k [^0-9].

\s

Odpovídá bílému znaku. Ekvivalentní k [ \t-\r].

\S

Odpovídá nebílému znaku. Ekvivalentní k [^ \t-\r].

\w

Odpovídá „slovním znakům“ (pouze ASCII). Ekvivalentní k [A-Za-z0-9_].

\W

Odpovídá ne-„slovním znakům“ (pouze ASCII). Ekvivalentní k [^A-Za-z0-9_].

\

Escape znak. Jakýkoli jiný znak následující po zpětném lomítku, kromě výše uvedených, se bere doslovně. Například \* je ekvivalentní doslovnému * (není považován za operátor *). Všimněte si, že \r, \n atd. nejsou zpracovávány nijak speciálně a budou ekvivalentní doslovným písmenům r, n atd. Z tohoto důvodu se nedoporučuje používat pro regulární výrazy raw řetězce Pythonu (r""). Například r"\r\n" použité jako regulární výraz je ekvivalentní "rn". Chcete-li najít znak CR následovaný LF, použijte "\r\n".

NENÍ PODPOROVÁNO:

  • počítané opakování ({m,n})

  • pojmenované skupiny ((?P<name>...))

  • pokročilejší tvrzení (\b, \B)

  • escapování speciálních znaků jako \r, \n - místo toho použijte vlastní escapování Pythonu

  • atd.

Příklad:

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

Funkce#

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

Zkompiluje regulární výraz a vrátí objekt regex.

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

Zkompiluje regex_str a vyhledá jej v řetězci string. Na rozdíl od match prohledá řetězec a najde první pozici, která odpovídá regulárnímu výrazu (která stále může být 0, pokud je regulární výraz ukotvený).

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

Zkompiluje regex_str a vyhledá jej v řetězci string, nahradí všechny shody hodnotou replace a vrátí nový řetězec.

replace může být řetězec nebo funkce. Pokud je to řetězec, lze použít escape sekvence ve tvaru \<number> a \g<number> k expanzi na odpovídající skupinu (nebo na prázdný řetězec u skupin bez shody). Pokud je replace funkce, musí přijímat jediný argument (shodu) a měla by vracet náhradní řetězec.

Pokud je zadán nenulový count, nahrazování se zastaví po provedení tohoto počtu náhrad. Argument flags je ignorován.

Objekty regex#

Zkompilovaný regulární výraz. Instance této třídy se vytvářejí pomocí re.compile().

class re.regex

Objekt zkompilovaného regulárního výrazu vrácený funkcí re.compile().

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

Aplikuje tento zkompilovaný regulární výraz na řetězec string, ukotvený na začátku prohledávané oblasti, a vrátí objekt match, nebo None, pokud regulární výraz neodpovídá. Toto je ekvivalent zkompilovaného vzoru pro match na úrovni modulu a je mnohem efektivnější, když se stejný vzor aplikuje na více řetězců.

Volitelný parametr pos udává index v řetězci string, kde má prohledávání začít; výchozí hodnota je 0. Toto není zcela ekvivalentní řezání řetězce; znak vzoru '^' odpovídá na skutečném začátku řetězce a na pozicích těsně za znakem nového řádku, ale ne nutně na indexu, kde má prohledávání začít.

Volitelný parametr endpos omezuje, jak daleko se řetězec string prohledává; bude to, jako by řetězec byl dlouhý endpos znaků, takže se prohledávají pouze znaky od pos po endpos - 1. Pokud je endpos None (výchozí), prohledává se celý řetězec.

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

Prochází řetězec string a hledá první místo, kde tento zkompilovaný regulární výraz vytvoří shodu, a vrátí objekt match, nebo None, pokud žádná pozice neodpovídá. Toto je ekvivalent zkompilovaného vzoru pro funkci search() na úrovni modulu a je mnohem efektivnější, když se stejný vzor aplikuje na více řetězců.

Volitelný parametr pos udává index v řetězci string, kde má prohledávání začít; výchozí hodnota je 0. Toto není zcela ekvivalentní řezání řetězce; znak vzoru '^' odpovídá na skutečném začátku řetězce a na pozicích těsně za znakem nového řádku, ale ne nutně na indexu, kde má prohledávání začít.

Volitelný parametr endpos omezuje, jak daleko se řetězec string prohledává; bude to, jako by řetězec byl dlouhý endpos znaků, takže se prohledávají pouze znaky od pos po endpos - 1. Pokud je endpos None (výchozí), prohledává se celý řetězec.

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

Vyhledá tento zkompilovaný regulární výraz v řetězci string, nahradí všechny shody hodnotou replace a vrátí nový řetězec. Toto je ekvivalent zkompilovaného vzoru pro funkci sub() na úrovni modulu a je mnohem efektivnější, když se stejný vzor aplikuje na více řetězců.

replace může být řetězec nebo funkce. Pokud je to řetězec, lze použít escape sekvence ve tvaru \<number> a \g<number> k expanzi na odpovídající skupinu (nebo na prázdný řetězec u skupin bez shody). Pokud je replace funkce, musí přijímat jediný argument (shodu) a měla by vracet náhradní řetězec.

Pokud je zadán nenulový count, nahrazování se zastaví po provedení tohoto počtu náhrad. Argument flags je ignorován.

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

Rozdělí řetězec string pomocí regulárního výrazu. Pokud je zadán max_split, určuje maximální počet rozdělení, která se mají provést. Vrací seznam řetězců (může obsahovat až max_split+1 prvků, je-li zadán).

Objekty shody (match)#

Objekt shody uchovává výsledek úspěšné shody.

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

Porovná regex_str s řetězcem string, ukotvený na začátku řetězce, a vrátí objekt shody, nebo None, pokud neodpovídá. Toto je zkratka na úrovni modulu: re.match(regex_str, string) je ekvivalentní re.compile(regex_str).match(string).

Stejný objekt shody vrací také search(), metody zkompilovaného vzoru regex.match() / regex.search() a je předáván náhradní funkci používané v sub().

group(index: int) str#

Vrátí odpovídající (pod)řetězec. index je 0 pro celou shodu, 1 a více pro jednotlivé zachytávající skupiny. Podporovány jsou pouze číselné skupiny.