Expressões Regulares (re) em Python – Procurando Padrões em Textos

No mundo do processamento de textos, poucas ferramentas são tão poderosas e flexíveis quanto as expressões regulares (ou regex). Elas permitem encontrar, extrair, substituir e validar padrões em strings de maneira rápida e eficiente.

Em Python, o módulo re fornece suporte completo para regex, permitindo desde buscas simples até construções complexas que reconhecem padrões avançados em textos.

Neste artigo, você vai aprender:


🔹 1. O que são Expressões Regulares?

Uma expressão regular é uma linguagem de padrões usada para identificar cadeias de caracteres que seguem determinadas regras.

Exemplo:

  • Regex: \d{2}/\d{2}/\d{4}

  • Casa com datas no formato: 25/12/202501/01/2000.

Ou seja, em vez de escrever loops complicados para analisar strings, você pode escrever um padrão compacto que descreve o que deseja encontrar.


🔹 2. Importando o módulo re

Em Python, o módulo re é o ponto de partida:

import re

🔹 3. Principais funções do módulo re

re.match(pattern, string)

Verifica se o padrão aparece no início da string.

import re

texto = "Python é incrível"
resultado = re.match(r"Python", texto)
print(resultado)  # <re.Match object ...>

re.search(pattern, string)

Procura o padrão em qualquer parte da string.

texto = "Eu gosto de Python"
resultado = re.search(r"Python", texto)
print(resultado.group())  # Python

re.findall(pattern, string)

Retorna todas as ocorrências encontradas em uma lista.

texto = "O preço é 100, depois 200 e finalmente 300"
numeros = re.findall(r"\d+", texto)
print(numeros)  # ['100', '200', '300']

re.sub(pattern, repl, string)

Substitui partes do texto que correspondem ao padrão.

texto = "Email: teste@exemplo.com"
novo = re.sub(r"\w+@\w+\.\w+", "[oculto]", texto)
print(novo)  # Email: [oculto]

re.split(pattern, string)

Divide o texto usando o padrão como separador.

texto = "um,dois;tres quatro"
partes = re.split(r"[,; ]", texto)
print(partes)  # ['um', 'dois', 'tres', 'quatro']

🔹 4. Metacaracteres mais usados

SímboloSignificadoExemploCasa com
.Qualquer caractere (exceto nova linha)a.bacba-b
^Início da string^OláOlá mundo
$Fim da stringmundo$Olá mundo
*0 ou mais repetiçõesgo*ggogoo
+1 ou mais repetiçõesgo+gogoo
?0 ou 1 ocorrênciacolou?rcolorcolour
{n}Exatamente n vezes\d{4}2025
{n,}Pelo menos n vezes\d{2,}121234
{n,m}Entre n e m vezes\d{2,4}121231234
[]Conjunto de caracteres[aeiou]aei
``Ou (alternativa)`Python
()Agrupamento(ab)+abababababab

🔹 5. Classes de caracteres

  • \d → dígito (0-9)

  • \D → não-dígito

  • \w → alfanumérico (a-zA-Z0-9_)

  • \W → não-alfanumérico

  • \s → espaço, tab, quebra de linha

  • \S → não-espaço

Exemplo:

texto = "Usuário: João, Id: 1234"
resultado = re.findall(r"\w+", texto)
print(resultado)  # ['Usuário', 'João', 'Id', '1234']

🔹 6. Exemplos práticos

6.1 Validando e-mails

email = "teste@dominio.com"
padrao = r"^[\w\.-]+@[\w\.-]+\.\w+$"
if re.match(padrao, email):
    print("E-mail válido")
else:
    print("E-mail inválido")

6.2 Extraindo números de telefone

texto = "Me ligue: (11) 91234-5678 ou (21) 99876-5432"
telefones = re.findall(r"\(\d{2}\)\s?\d{4,5}-\d{4}", texto)
print(telefones)  # ['(11) 91234-5678', '(21) 99876-5432']

6.3 Encontrando CEPs

texto = "O CEP é 12345-678 e o outro é 98765-432"
ceps = re.findall(r"\d{5}-\d{3}", texto)
print(ceps)  # ['12345-678', '98765-432']

6.4 Capturando palavras específicas

texto = "Python é divertido. Eu gosto de aprender Python."
resultado = re.findall(r"\bPython\b", texto)
print(resultado)  # ['Python', 'Python']

6.5 Substituindo informações sensíveis

texto = "Cartão: 1234-5678-9876-5432"
mascarado = re.sub(r"\d{4}-\d{4}-\d{4}-(\d{4})", "****-****-****-\\1", texto)
print(mascarado)  # Cartão: ****-****-****-5432

🔹 7. Flags úteis no re

  • re.IGNORECASE (re.I) → ignora maiúsculas/minúsculas.

  • re.MULTILINE (re.M) → permite ^ e $ funcionarem em múltiplas linhas.

  • re.DOTALL (re.S) → faz . casar também com quebras de linha.

Exemplo:

texto = "Python é incrível\nPYTHON é poderoso"
resultado = re.findall(r"python", texto, re.I)
print(resultado)  # ['Python', 'PYTHON']

🔹 8. Boas práticas

✅ Use raw strings (r"padrão") para evitar problemas com \n\t.
✅ Prefira regex simples e legíveis – padrões muito complexos dificultam manutenção.
✅ Teste expressões em ferramentas online como regex101.
✅ Documente bem regex mais complicadas.
✅ Evite regex para tarefas triviais que podem ser feitas com startswithsplit, etc.


🔹 9. Conclusão

As expressões regulares são indispensáveis quando se trata de buscar e manipular padrões em texto. Com o módulo re, Python oferece:

  • Funções para buscar (searchmatchfindall).

  • Ferramentas para substituir (sub).

  • Poderosos metacaracteres e quantificadores.

  • Suporte a flags para maior flexibilidade.

Seja para validar e-mails, extrair telefones, processar logs ou anonimizar dados sensíveis, regex é uma das ferramentas mais poderosas que você pode dominar.

Comentários

Postagens mais visitadas deste blog

Manipulação de Arquivos no C#: Como Ler, Escrever e Trabalhar com Arquivos de Forma Simples

Gerando Relatórios em PDF com Python (ReportLab e FPDF)

C# e Banco de Dados: Como Conectar e Realizar Operações com SQL Server