Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Python

Expressões regulares em Python

by
Difficulty:IntermediateLength:ShortLanguages:

Portuguese (Português) translation by Jonathan Ramos (you can also view the original English article)

Alguma vez você já se perguntou qual é a chave para encontrar algum texto em um documento, ou identificar um texto que está de acordo com algum formato, como um endereço de e-mail, e outras operações similares?

A chave para tais operações são as expressões regulares (regex). Vejamos algumas definições para expressões regulares. Na Wikipédia, regex é definido da seguinte forma:

Uma sequência de caracteres que define um padrão de pesquisa, principalmente para encontrar padrões em uma string, ou detectar uma sequência de caracteres, ou seja, como operações de "localizar e substituir". O conceito surgiu na década de 1950, quando o matemático americano Stephen Kleene formalizou a descrição de uma linguagem regular que tornou-se comum em utilitários de processamento de texto Unix, editores, grep, e filtros.

Outra definição legal de regular-expressions.info é:

Uma expressão regular (regex ou regexp para abreviar) é uma sequência de caracteres de texto especial para descrever um padrão de pesquisa. Você pode pensar em expressões regulares como um asterisco em esteroides. Você provavelmente está familiarizado com notações de curinga, como *.txt para encontrar todos os arquivos de texto em um gerenciador de arquivos. O equivalente em regex é .*\.txt$

Eu sei que o conceito de expressões regulares ainda pode parecer um pouco vago. Então, vamos olhar alguns exemplos de regex para entender melhor o conceito.

Exemplos de expressões regulares

Nesta seção, mostrarei alguns exemplos de regex para ajudá-lo a entender o conceito.

Digamos que você tem este regex:

Isto simplesmente está nos dizendo para detectar abder em uma palavra só.

Que tal este regex?

Você pode ler este regex dessa forma: encontre um padrão de texto tal que a primeira letra é a e a última letra é t, e entre elas pode existir n ou r. Então as palavras correspondentes são ant e art.

Deixe-me dar-lhe um pequeno questionário até esse ponto. Como você escreveria uma expressão regular que começa com ca e termina com um ou todos o caracteres seguintes tbr? Sim, este regex pode ser escrito da seguinte forma:

Se você ver um regex que começa com um acento circunflexo ^, isto significa a string deve começar com os caracteres mencionados após ^. Então, se você usar o regex abaixo, vai identificar strings que comecam com This.

Assim, na seguinte string:

Baseado no regex /^This/, serão identificadas as seguintes sequências:

E se quisermos identificar uma string que termina com uma sequência de caracteres? Neste caso, usamos o sinal de dólar $. Aqui está um exemplo:

Assim, nas frases acima (as três linhas), os seguintes padrões seriam identificados por este regex:

Bem, o que você acha sobre este regex?

Eu sei que pode parecer complexo à primeira vista, mas vamos passar por isso passo a passo.

Já vimos o que é um acento circunflexo ^. Isso serve pra identificar uma string que começa com uma sequência de caracteres. [A-Z] refere-se às letras maiúsculas. Então, se nós lermos esta parte do regex: ^[A-Z], ela está nos dizendo para identificar a sequência de caracteres que começa com uma letra maiúscula. A última parte, [a-z], significa que depois de encontrar uma sequência de caracteres que começa com uma letra maiúscula, a próxima letra deve ser uma minúscula do alfabeto.

Então, qual das seguintes frases serão identificadas usando este regex? Se você não tiver certeza, você pode usar o Python, como veremos na próxima seção para testar a sua resposta.

Expressões regulares são um tema muito amplo, e esses exemplos são apenas para dar-lhe uma sensação do que são e como nós as usamos.

Uma boa referência para obter mais informações sobre expressões regulares e ver mais exemplos é RexEgg.

Expressões regulares em Python

Agora vamos para a parte divertida. Queremos ver como trabalhar com algumas das expressões regulares acima em Python. O módulo que vamos usar para trabalhar com expressões regulares em Python é o módulo re.

O primeiro exemplo foi sobre encontrar a palavra abder. Em Python, faremos isto da seguinte forma:

Se você executar o script Python acima, você terá a saída: None!

O script funciona muito bem, mas o problema é como funciona a função match(). Se olhar para a documentação do módulo re, isto é o que faz a função match():

Se zero ou mais caracteres no início da sequência de caracteres correspondem ao padrão da expressão regular, retorne o objeto correspondente. Retorne None se a sequência de caracteres não coincide com o padrão; observe que isso é diferente de zero identificações.

Aha, graças a isso podemos entender que aquele match() retornará um resultado apenas se tiver identificado algo no início da string.

Em vez disso podemos usar a função search(), que é, com base na documentação:

Busca dentro de uma string onde a expressão regular pode identificar, e retorna o objeto identificado correspondente. Retorna None se nenhuma posição na sequência de caracteres corresponde ao padrão; observe que isso é diferente de encontrar zero correspondências em algum ponto na string.

Então, se nós escrevermos o script acima, mas com search() em vez de match(), recebemos a seguinte saída:

<_sre.SRE_Match object at 0x101cfc988>

Ou seja, um objeto idenficado foi retornado.

Se quisermos retornar o resultado (correspondência de strings), usamos a função group(). Se queremos ver a todas as combinações, usamos group(0). Assim:

print match_pattern.group(0)

retornará a saída: Abder.

Se pegarmos o segundo regex na seção anterior, que é /a[nr]t/, ele pode ser escrito em Python assim:

A saída desse script é: ant.

Conclusão

O artigo está ficando grande, e o assunto de expressões regulares em Python com certeza leva mais de um artigo, se não um livro por si só.

Eeste artigo, no entanto, provê um início rápido e confiança para entrar no mundo das expressões regulares em Python. Você pode consultar a documentação do módulo re para obter mais informações sobre este módulo e como ir mais fundo no assunto.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.