re — expressões regulares simples

Este módulo implementa operações de expressões regulares. A sintaxe de expressões regulares suportada é um subconjunto do módulo re do CPython (e na verdade é um subconjunto das expressões regulares estendidas do POSIX).

Os operadores e sequências especiais suportados são:

.

Corresponde a qualquer caractere.

[...]

Corresponde a um conjunto de caracteres. São suportados caracteres individuais e intervalos, incluindo conjuntos negados (por exemplo, [^a-c]).

^

Corresponde ao início da string.

$

Corresponde ao final da string.

?

Corresponde a zero ou uma ocorrência do subpadrão anterior.

*

Corresponde a zero ou mais ocorrências do subpadrão anterior.

+

Corresponde a uma ou mais ocorrências do subpadrão anterior.

??

Versão não gulosa de ?, corresponde a zero ou um, com preferência por zero.

*?

Versão não gulosa de *, corresponde a zero ou mais, com preferência pela menor correspondência.

+?

Versão não gulosa de +, corresponde a um ou mais, com preferência pela menor correspondência.

|

Corresponde ao subpadrão do lado esquerdo ou ao do lado direito deste operador.

(...)

Agrupamento. Cada grupo é de captura (a substring que ele captura pode ser acessada com o método match.group()).

(?:...)

Agrupamento sem captura. Cada grupo é correspondido usando as mesmas regras do agrupamento normal, mas não fará parte do objeto de correspondência.

\d

Corresponde a um dígito. Equivalente a [0-9].

\D

Corresponde a um não dígito. Equivalente a [^0-9].

\s

Corresponde a um espaço em branco. Equivalente a [ \t-\r].

\S

Corresponde a um caractere que não seja espaço em branco. Equivalente a [^ \t-\r].

\w

Corresponde a “caracteres de palavra” (somente ASCII). Equivalente a [A-Za-z0-9_].

\W

Corresponde a caracteres que não sejam “caracteres de palavra” (somente ASCII). Equivalente a [^A-Za-z0-9_].

\

Caractere de escape. Qualquer outro caractere após a contrabarra, exceto os listados acima, é tratado literalmente. Por exemplo, \* é equivalente ao literal * (não tratado como o operador *). Observe que \r, \n, etc. não são tratados de forma especial e serão equivalentes às letras literais r, n, etc. Por causa disso, não é recomendado usar strings raw do Python (r"") para expressões regulares. Por exemplo, r"\r\n" quando usado como expressão regular é equivalente a "rn". Para corresponder ao caractere CR seguido de LF, use "\r\n".

NÃO SUPORTADO:

  • repetições contadas ({m,n})

  • grupos nomeados ((?P<name>...))

  • asserções mais avançadas (\b, \B)

  • escapes de caracteres especiais como \r, \n - use o escape próprio do Python em vez disso

  • etc.

Exemplo:

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

Funções

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

Compila a expressão regular e retorna um objeto regex.

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

Compila regex_str e o procura em uma string. Diferente de match, isto procura na string a primeira posição que corresponde à regex (que ainda pode ser 0 se a regex estiver ancorada).

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

Compila regex_str e o procura em string, substituindo todas as correspondências por replace e retornando a nova string.

replace pode ser uma string ou uma função. Se for uma string, então sequências de escape da forma \<number> e \g<number> podem ser usadas para expandir para o grupo correspondente (ou uma string vazia para grupos sem correspondência). Se replace for uma função, então ela deve receber um único argumento (a correspondência) e deve retornar uma string de substituição.

Se count for especificado e for diferente de zero, então a substituição parará após esse número de substituições ser realizado. O argumento flags é ignorado.

Objetos regex

Expressão regular compilada. Instâncias desta classe são criadas usando re.compile().

class re.regex

Objeto de expressão regular compilada retornado por re.compile().

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

Aplica esta regex compilada a string, ancorada no início da região de busca, e retorna um objeto match, ou None se a regex não corresponder. Este é o equivalente, para padrão compilado, de match no nível do módulo, e é muito mais eficiente quando o mesmo padrão é aplicado a várias strings.

O parâmetro opcional pos fornece um índice em string onde a busca deve começar; o padrão é 0. Isto não é completamente equivalente a fatiar a string; o caractere de padrão '^' corresponde no início real da string e em posições logo após uma quebra de linha, mas não necessariamente no índice onde a busca deve começar.

O parâmetro opcional endpos limita até onde string é pesquisada; será como se a string tivesse endpos caracteres de comprimento, de modo que apenas os caracteres de pos até endpos - 1 são pesquisados. Se endpos for None (o padrão), toda a string é pesquisada.

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

Percorre string procurando a primeira localização onde esta regex compilada produz uma correspondência, e retorna um objeto match, ou None se nenhuma posição corresponder. Este é o equivalente, para padrão compilado, da função search() no nível do módulo, e é muito mais eficiente quando o mesmo padrão é aplicado a várias strings.

O parâmetro opcional pos fornece um índice em string onde a busca deve começar; o padrão é 0. Isto não é completamente equivalente a fatiar a string; o caractere de padrão '^' corresponde no início real da string e em posições logo após uma quebra de linha, mas não necessariamente no índice onde a busca deve começar.

O parâmetro opcional endpos limita até onde string é pesquisada; será como se a string tivesse endpos caracteres de comprimento, de modo que apenas os caracteres de pos até endpos - 1 são pesquisados. Se endpos for None (o padrão), toda a string é pesquisada.

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

Procura esta regex compilada em string, substituindo todas as correspondências por replace, e retorna a nova string. Este é o equivalente, para padrão compilado, da função sub() no nível do módulo, e é muito mais eficiente quando o mesmo padrão é aplicado a várias strings.

replace pode ser uma string ou uma função. Se for uma string, então sequências de escape da forma \<number> e \g<number> podem ser usadas para expandir para o grupo correspondente (ou uma string vazia para grupos sem correspondência). Se replace for uma função, então ela deve receber um único argumento (a correspondência) e deve retornar uma string de substituição.

Se count for especificado e for diferente de zero, então a substituição parará após esse número de substituições ser realizado. O argumento flags é ignorado.

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

Divide uma string usando a regex. Se max_split for fornecido, ele especifica o número máximo de divisões a realizar. Retorna uma lista de strings (pode haver até max_split+1 elementos se ele for especificado).

Objetos de correspondência

Um objeto de correspondência guarda o resultado de uma correspondência bem-sucedida.

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

Corresponde regex_str contra string, ancorada no início da string, e retorna um objeto de correspondência, ou None se não corresponder. Este é o atalho no nível do módulo: re.match(regex_str, string) é equivalente a re.compile(regex_str).match(string).

O mesmo objeto de correspondência também é retornado por search(), pelos métodos regex.match() / regex.search() de padrão compilado, e é passado à função de substituição usada por sub().

group(index: int) str

Retorna a (sub)string correspondida. index é 0 para a correspondência inteira, e 1 ou mais para cada grupo de captura. Apenas grupos numéricos são suportados.