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: