Desmistificando Expressões Regulares (Regex) em Python

Um Guia para Iniciantes e Estudantes Intermediários de Ciência de Dados

Bernardo Lago
Let’s Data
5 min readDec 16, 2023

--

Imagem: DALL•E 3

No campo da ciência de dados e programação, as expressões regulares (Regex) se destacam como uma ferramenta poderosa para extrair padrões, manipular texto e validar dados. Essas construções versáteis ganharam imensa popularidade devido à sua capacidade de lidar com tarefas complexas de busca e correspondência com precisão e flexibilidade. Embora as Regex possam parecer assustadoras à primeira vista, é essencial para qualquer aspirante a cientista de dados compreender seus fundamentos e utilizar efetivamente suas capacidades.

Introdução às Expressões Regulares (Regex)

As expressões regulares, frequentemente abreviadas como Regex, é uma ferramenta poderosa de correspondência de padrões usada para buscar, localizar e manipular strings. Elas oferecem uma maneira concisa e expressiva de descrever padrões dentro de texto, permitindo que programadores extraiam informações específicas, validem dados e realizem várias operações relacionadas a texto.

A Anatomia de uma Expressão Regular

Um padrão de Regex é composto por vários componentes que trabalham juntos para definir o padrão desejado. Estes incluem:

Metacaracteres: Esses caracteres especiais têm significados específicos dentro do Regex. Por exemplo, o asterisco (*) representa zero ou mais ocorrências do caractere precedente.

Classes de Caracteres: Elas permitem que você especifique um intervalo de caracteres, como [a-z] para todas as letras minúsculas ou [0–9] para dígitos.

Espaçamento: Espaços em branco podem ser usados para delimitar diferentes componentes do padrão Regex.

Correspondência de Padrões com Expressões Regulares

As expressões regulares empregam correspondência de padrões para buscar strings específicas dentro de um texto fornecido. Isso é alcançado usando o módulo re embutido do Python, que fornece funções para executar várias operações de Regex.

  1. re.search(): Esta função verifica se o padrão existe dentro da string e retorna um objeto de correspondência se encontrado.
  2. re.findall(): Esta função extrai todas as ocorrências do padrão da string e retorna uma lista de objetos de correspondência.
  3. re.sub(): Esta função substitui todas as ocorrências do padrão pela string de substituição especificada.

Exemplos de Expressões Regulares

Para ilustrar o uso de Regex, vamos explorar alguns exemplos práticos:

Extraindo Endereços de E-mail: Utilize o padrão r"[\w\.-]+@[\w\.-]+\.[\w]{2,3}" para extrair endereços de e-mail do texto.

Metacaracteres

A expressão utiliza vários metacaracteres, que são símbolos especiais com significados específicos dentro do Regex. Estes incluem:

  • \w: Corresponde a um caractere alfanumérico (a-z, A-Z, 0-9, _).
  • \.: Corresponde a um ponto (.) literal.
  • -: Corresponde a um hífen (-) literal.
  • +: Corresponde a uma ou mais ocorrências do caractere precedente.
  • {2,3}: Corresponde exatamente a duas ou três ocorrências do caractere precedente.

Classes de Caracteres

Regex também utiliza classes de caracteres, que permitem especificar um intervalo de caracteres. As seguintes classes de caracteres são usadas neste exemplo:

  • [\w\.-]: Corresponde a um ou mais caracteres alfanuméricos, pontos ou hifens.
  • [\w\.-]+: Corresponde a uma ou mais ocorrências da classe de caracteres precedente.
  • [\w\.-]+@: Corresponde a um nome de usuário seguido por um símbolo '@' literal.
  • [\w\.-]+\.[\w]{2,3}: Corresponde a um nome de domínio seguido por um ponto (.) literal e dois a três caracteres, o que representa um domínio como .com, .org, .net, ou .br.

Espaçamento

Espaçamento é usado para delimitar diferentes componentes do padrão Regex. A sequência de escape ‘\r\n’ representa um carriage return (quebra de linha) (\r) seguido de uma quebra de linha (\n), que é frequentemente usada para representar o final de uma linha em texto.

Combinando Componentes

A expressão combina esses componentes para formar um padrão que corresponde a um endereço de e-mail válido. O nome de usuário pode conter caracteres alfanuméricos, pontos ou hifens, e o nome do domínio também pode conter esses caracteres junto com pontos. O domínio deve ter dois ou três caracteres e pode incluir caracteres alfanuméricos.

Exemplo de Uso: Para usar essa expressão para extrair endereços de e-mail do texto, você pode usar o seguinte código Python:

import re

texto = "Este é um exemplo de um endereço de e-mail: johndoe@example.com. Outro exemplo é example@example.org."

correspondencias = re.findall(r"[\w\.-]+@[\w\.-]+\.[\w]{2,3}", texto)

for correspondencia in correspondencias:
print(correspondencia)

Este código imprimirá a seguinte saída:

johndoe@example.com
example@example.org

O pacote Python para expressões regulares é o regex, que é importado pelo comando import re.

Metacaracteres Especiais: \s e \d

Além dos metacaracteres que discutimos anteriormente, o Regex oferece alguns metacaracteres especiais que podem ser incrivelmente úteis na correspondência de padrões. Dois desses metacaracteres especiais são \s e \d.

  • \s: O metacaractere \s representa caracteres de espaço em branco. Isso inclui espaços, tabulações, quebras de linha e outros caracteres semelhantes usados para formatação e espaçamento em texto. Por exemplo, se você deseja corresponder a qualquer sequência de caracteres de espaço em branco, pode usar \s+ em seu padrão Regex, onde + corresponde a uma ou mais ocorrências. Aqui está um exemplo de como usá-lo:
import re

texto = "Este é algum texto com múltiplos espaços."
correspondencias = re.findall(r"\s+", texto)

for correspondencia in correspondencias:
print(f"Espaço em branco encontrado: '{correspondencia}'")

Este código identificará e imprimirá todas as sequências de um ou mais caracteres de espaço em branco no texto.

  • \d: O metacaractere `\d` corresponde a qualquer dígito de 0 a 9. É uma maneira útil de encontrar valores numéricos dentro do texto. Por exemplo, se você deseja extrair todos os números de telefone de um documento, pode usar `\d{2}-\d{5}-\d{4}` em seu padrão para corresponder ao formato comum de números de telefone no Brasil:
import re

texto = "Aqui estão alguns números de telefone: 11-92345-67890 e 11-99876-5432."
correspondencias = re.findall(r"\d{2}-\d{5}-\d{4}", texto)

for correspondencia in correspondencias:
print(f"Número de telefone encontrado: {correspondencia}")

Este código identificará e imprimirá todos os números de telefone no formato `xx-xxxx-xxxx`.

Esses metacaracteres especiais, \s e \d, podem ser combinados com outros componentes Regex para criar padrões poderosos para corresponder e extrair tipos específicos de informações de texto. Quer você esteja trabalhando com dados de texto em ciência de dados ou precise validar e processar entradas, entender e usar esses metacaracteres de forma eficaz pode ser um ativo valioso em sua caixa de ferramentas.

Conclusão

Dominar expressões regulares (Regex) é uma habilidade inestimável para profissionais de ciência de dados. Com suas poderosas capacidades de correspondência de padrões e diversas aplicações, o Regex capacita cientistas de dados a lidar eficazmente com dados textuais, extrair informações valiosas e garantir a qualidade dos dados. Ao compreender os fundamentos do Regex e praticar seu uso com conjuntos de dados do mundo real, os cientistas de dados podem aumentar sua produtividade e contribuir para análises mais esclarecedoras.

Nos ajude a te ajudar!

Se você gostou deste artigo e quer apoiar o Let’s Data, dê uns claps! E você pode fazer isso mais de uma vez, que tal uns 15?

Deixe um comentário dizendo o que acha deste assunto!

--

--

Bernardo Lago
Let’s Data

Data Scientist at NielsenIQ. Cofounder at Let’s Data