Conceitos Fundamentais
Expressões regulares são padrões de texto usados para identificar, manipular e extrair informações de strings. Em Python, o módulo re fornece ferramentas para processar esses padrões de forma eficiente. Este guia aborda os princípios essenciais e aplicações práticas para manipulação de texto.
Aplicações típicas incluem verificação de correspondências em cadeias de caracteres, localização de subsequências específicas, substituição de partes do texto e segmentação de strings com base em delimitadores complexos.
Meta-caracteres Importantes
.– corresponde a qualquer caractere, exceto quebras de linha.^– indica o início da string.$– indica o final da string.*– zero ou mais ocorrências do elemento anterior.+– uma ou mais ocorrências.?– zero ou uma ocorrência.{n}– exatamente n repetições.{n,}– pelo menos n repetições.{n,m}– entre n e m repetições.[]– define uma classe de caracteres.()– agrupa expressões para captura ou aplicação de quantificadores.
Buscando Substrings
Para localizar substrings que correspondam a um padrão, utilize as funções re.search e re.match. A primeira procura em qualquer lugar da string, enquanto a segunda verifica apenas no início.
import re
entrada = "Contato principal: ana.silva@empresa.org, secundário: 111-222-3333."
regex_correio = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
regex_telefone = r"\d{3}-\d{3}-\d{4}"
# Localiza o primeiro endereço de e-mail
resultado_correio = re.search(regex_correio, entrada)
if resultado_correio:
print("E-mail detectado:", resultado_correio.group(0))
# Verifica correspondência de telefone no início
resultado_telefone = re.match(regex_telefone, entrada)
if not resultado_telefone:
print("Nenhum telefone encontrado no início da string")
# Encontra todos os e-mails na entrada
todos_correios = re.findall(regex_correio, entrada)
print("E-mails encontrados:", todos_correios)
Substituindo Partes do Texto
A função re.sub permite substituir subsequências que casam com um padrão por um texto novo, enquanto re.subn também retorna o número de substituições realizadas.
import re
mensagem = "Agendar com pedro@email.com ou ligar para 444-555-6666."
padrao_correio = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
padrao_telefone = r"\d{3}-\d{3}-\d{4}"
# Substitui e-mails por marcadores
mensagem_modificada = re.sub(padrao_correio, "[PROTEGIDO]", mensagem)
print("Após substituição de e-mails:", mensagem_modificada)
# Substitui telefones e obtém contagem
mensagem_final, total_substituicoes = re.subn(padrao_telefone, "[PROTEGIDO]", mensagem_modificada)
print("Texto final:", mensagem_final)
print("Quantidade de substituições:", total_substituicoes)
Segmentando Strings
Para dividir uma string em múltiplas partes com base em um padrão, empregue re.split. É possível limitar o número de divisões usando o parâmetro maxsplit.
import re
texto = "item1;item2,item3:item4"
delimitador = r"[;,:]"
# Segmenta por qualquer um dos delimitadores
segmentos = re.split(delimitador, texto)
print("Segmentos obtidos:", segmentos)
# Realiza apenas duas divisões
segmentos_limitados = re.split(delimitador, texto, maxsplit=2)
print("Segmentos com divisão restrita:", segmentos_limitados)