anterior | início | próxima

Python

característica  como fazer
----------------------------------------------
busca           métodos match, search
substituição    métodos sub, subn
divisão         método split
ER crua         r'entre aspas raw'
ignore M/m      modificadores re.I, (?i)
global          é o padrão

Usando basicamente a mesma definição de metacaracteres que aprendemos, sua sintaxe é tranqüila, mas por manipular as ER como objetos, acessando métodos, o veremos em detalhes. Como primeira dica, para evitar o pré-processamento da ER pela linguagem, basta colocar o modificador r (do inglês "raw", cru) imediatamente antes das aspas, assim: r'^\.[0-9]'.

O módulo que trata das ERs é o re, então antes de mais nada: import re. As funções principais são: match, que casa a ER no começo da linha, search que casa em qualquer parte da linha e sub que faz a substituição de padrões. Em Python podemos compilar uma ER e guardá-la em uma variável, podendo reutilizá-la quantas vezes se precisar:

>>> import re
>>> txt = 'Maçã'
>>> ER1 = re.compile('[a-z]', re.I)
>>> print ER1.sub('.', txt)
..çã
>>> ER2 = re.compile(r'\w', re.L)
>>> print ER2.sub('.', txt)
....
>>> uau = r'((((((((((.))))))))))\10'
>>> re.sub(uau, '.', 'zz')
'.'

Temos vários conceitos demonstrados nesse exemplo. Primeiro temos um padrão de texto diversificado, com acentuação. Depois compilamos a expressão, colocando-a no objeto ER1. Note que ao compilar, temos algumas opções modificadoras, como o re.I que ignora a diferença entre maiúsculas e minúsculas. Depois na linha seguinte, chamamos o método sub, substituindo cada letra casada por um ponto. Pelo resultado podemos ver que o [a-z] casou a letra M maiúscula, como esperado.

Depois compilamos um segundo objeto, com a ER \w que está no formato cru (modificador r). Logo após, temos o modificador re.L, que força o uso da localização. Você se lembra das classes POSIX? O Python não tem [:alpha:], tem \w, re.L, que não é completamente similar, mas também inclui acentuação, como visto na saída ...., casando também os caracteres çã. E para fechar, vemos que o Python suporta tranqüilamente mais de 9 retrovisores.

Temos também outros modificadores de compilação, como o DOTALL, para o metacaractere ponto também casar a quebra de linha, o MULTILINE que faz as âncoras ^ e $ casar começo e fim de linha dentro do texto, separados pelo \n e o VERBOSE, que permite colocar comentários no meio da expressão regular. Esses modificadores, com o I e L, podem ser especificados direto na ER, sem compilação, pelo grupo vazio (?Z) em que Z é uma das letras "iLmsx" que identificam estes modificadores.

E para fechar, extrapolando um conceito, no Python você pode nomear partes da ER, e recuperar o texto casado por este nome, ou seja, você já define pseudovariáveis na própria ER. Podemos chamá-los de retrovisores nomeáveis. Veja um exemplo para extrair dados de uma data:

>>> data = '31/12/2001'
>>> ### expressão normal: ../../....
>>> ### agora ela com as partes nomeadas
>>> z='(?P<dd>..)/(?P<mm>..)/(?P<aaaa>....)'
>>> RE3 = re.compile(z)
>>> casamento = RE3.search(data)
>>> print casamento.group('dd')
31
>>> print casamento.group('mm')
12
>>> print casamento.group('aaaa')
2001

Mais informações em:

Está gostando da leitura?
Está aprendendo?
Compre o livro novo que traz mais conteúdo, texto atualizado e ilustrações!
anterior | início | próxima