As expressões regulares são uma forma concisa e eficiente de se encontrar padrões de caracteres em um texto. A linguagem
Python possui um amplo suporte para o uso de ER's, que será utilizado nos exemplos deste artigo para filtrar o código HTML obtido com as funções da biblioteca
urllib2.
Ao se criar uma expressão regular em Python, é importante definí-la como uma "raw string", o que evita seu pré-processamento pela linguagem e reduz a necessidade de escapar diversos caracteres especiais. Para isso, basta inserir um "r" antes da string:
expressao = r'^Linux'
Para buscar em uma string um padrão que "case" com uma determinada ER, utiliza-se o método search:
busca = re.search(expressao , string)
Este método retorna somente a primeira ocorrência do padrão encontrado na string. Caso não encontre o padrão, é retornado o valor None.
Para se exibir o padrão encontrado, utiliza-se o método group(), da seguinte forma:
print busca.group(0) #Todo o trecho "casado"
print busca.group() #Todos os grupos "casados"
print busca.group(1) #Primeiro grupo "casado"
print busca.group(3) #Terceiro grupo "casado"
Exemplo:
busca = re.search(r'(<h3>)([1-9]{4})(</h3>)' , '<a href=\"www.exemplo.com\"><h3>1988</h3></a>')
print busca.group(0) #exibe: <h3>1988</h3>
print busca.group(2) #exibe: 1988
Para se obter todas as ocorrências de um padrão em uma string, utiliza-se o método findall(), que retorna uma lista com todas as ocorrências encontradas.
frase = 'O rato roeu a roupa do rei de Roma.'
busca = re.findall(r'r[aeo]' , frase) # "r" seguido de "a", "e" ou "o"
print busca
#Saída: ['ra', 'ro', 'ro', 're']
Também é possível compilar uma expressão regular, o que torna sua execução mais rápida caso seja utilizada várias vezes no programa. A compilação retornará um objeto que possuirá os mesmos métodos do módulo re:
exp = re.compile(r'r[aeo]')
print exp.findall(frase)
Sobre os exemplos
As próximas páginas contém exemplos comentados utilizando os métodos dos módulos
urllib2 e
re. É importante destacar que, no universo da programação elegante em
Python, os programas de exemplo com certeza podem ser reescritos de formas muito mais compactas e com maior desempenho. Entretanto, por questões de clareza, os códigos foram estruturados de modo a facilitar a leitura e compreensão de usuários com conhecimentos básicos da linguagem Python.
Para facilitar o entendimento, o primeiro exemplo será mais detalhado, com interações do usuário e validações. Para não aumentar excessivamente os demais códigos, os outros exemplos não lidam com entradas dos usuários, tratamento das mesmas e tratamento de exceções.