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.