Regex, Consulta Rápida

Segue um resumo tipo cheat sheet para referência rápida sobre o uso de Expressões Regulares no Python.

Grupos de Caracteres

Padrão casa com
\w uma palavra comsposta de caracteres a-z, A-Z, 0-9 e sublinhado (_)
\d umúnico dígito 0-9
\s um espaço em branco incluindo \t, \n e \r
. qualquer caracter exceto quebra de linha
\W qualquer sinal exceto caracter alfanumérico e sublinhado
\D qualquer caracter exceto um dígito
\S qualquer caracter exceto um espaço em branco

Âncoras

Padrão significa
^ início de uma string
$ fim de uma string
\b posição definida como limite de palavra
\B posição definida como não sendo limite de palavra

Quantificadores

Na tabela abaixo chamamos de “quantificadores gulosos” ou greedy, aqueles que englobam a maior parte de texto possível casando o padrão. Já os “quantificadores não gulosos” ou lazy, englobam a menor parte de texto que satisfaz o padrão.

Quantificadores gulosos quantificadores não gulosos casa com
* *? o elemento precedente zero ou mais vezes
+ +? o elemento precedente uma ou mais vezes
? ?? o elemento precedente zero ou uma vez
{n} {n}? o elemento precedente exatamente n vezes
{n, } {n,}? o elemento precedente pelo menos n vezes
{n, m} {n, m}? o elemento precedente de n até m vezes

Conjunto e Faixas

Chamamos de faixas as ranges ou regiões delimitadas de um certo conjunto.

Padrão casa com
[XYZ] qualquer um dos elementos X, Y ou Z
[X-Y] elementos na faixa de X até Y
[^XYZ] qualquer elemento exceto X, Y ou Z
[^X-Y] qualquer elemento exceto aqueles na faixa de X até Y

Capturando Grupos

Padrão significa
(X) Captura X como um grupo
(?P<nome>X) Captura X e atribui a ele o nome
\N Referencia o grupo capturado #N
\g<N> sintaxe alternativa para referenciar o grupo capturado #N
X | Y casa X ou Y
(X) | (Y) casa o grupo (X) ou (Y)

Retrovisores

Em inglês se usa as expressões lookaround, lookbehind e lookafter para significar a busca por padrões dadas condições antes e depois do padrão regex. Chamaremos aui essas expressões de retrovisores.

Padrão significa
X(?=Y) casa com X se seguido por Y
X(?!Y) casa com X se não for imediatamente seguido por Y
(?<=Y)X casa com X se precedido por Y
(?<!Y)X casa com X se não precedido por Y

Funções Regex

São funções do módulo re:

re.fullmatch()retorna um objeto Match se o padrão casa com a string inteira

Método retorna
re.search(padrao, texto) 1º texto casado e sua posição, em qualquer parte do texto e em todas as linhas,
re.match(padrao, texto) 1º texto casado e sua posição, no início do texto e apenas na 1ª linha,
re.findall(padrao, texto) retorna uma lista com todos os trechos encontrados,
re.finditer() retorna um iterador com todos os trechos encontrados, não superpostos
re.split(padrao, texto) parte o texto na ocorrência do padrão e retorna as partes,
re.sub(padrao, sub, texto) substitue em texto o padrao por sub,
re.subn(padrao, texto) similar à sub mas retorna tupla com nova string e número de substituições
re.compile(padrao) compila e retorna um padrão regex pre-compilado

Flags ou sinalizadores Regex

Flag alias flag inline significado
re.ASCII re.A ?m essa flag só é relevante para padrões em bytes. Ele faz com que \w, \W,\b, \B, \d, \D e \S casem com ASCII caracteres apenas, ao invés do casamento com Unicode.
re.DEBUG N/A N/A a flag re.DEBUG provoca a exibição da informação de debug para o padrão compilado.
re.IGNORECASE re.I ?i faz busca independentemente do caso (maiúsculas/minúsculas). Portanto o padrão [A-Z] casa caracteres [a-Z] ou [a-z].
re.LOCALE re.L ?L só é relevante em padrões de bytes. Faz com que \w, \W, \b, \B e casamentos sensíveis ao caso dependente do locale do computador. Essa flag não é compatível com a flag re.ASCII flag.
re.MUTILINE re.M ?m essa flag faz com que as marcações ^/$ casem texto no início/final de cada linha em texto multi-linhas.
re.DOTALL re.S ?s essa flag faz com que o ponto (.) case todos as caracteres, inclusive newline. (Por default a marcação de ponto (.) casa qualquer caracter exceto newline).
re.VERBOSE re.X ?x essa flag permite que o padrão seja organizado em seções logicas, incluido a inserção de comentários.

Bibliografia

Leave a Reply

Your email address will not be published. Required fields are marked *