Está gostando da leitura?
Está aprendendo?
Compre o livro novo que traz mais conteúdo, texto atualizado e ilustrações!
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: