Como filtrar e manipular texto com a letra r
O tratamento de texto que contém a letra r parece banal até você tentar fazer algo como separar nomes próprios de palavras comuns em um banco de dados sujo. Eu já passei por isso há uns anos fazendo ETL para uma empresa de logística, e o problema era menor do que parecia no início.
O que é texto com a letra r na prática
Em termos técnicos, tudo o que envolve extrair, contar, substituir ou filtrar sequências de caracteres que incluam a letra r — maiúscula ou minúscula — em strings de qualquer tamanho. Não tem segredo conceitual. O trabalho está nos detalhes.
Método usando expressões regulares
A forma mais direta é com regex. No Python, por exemplo: import re
resultado = re.findall(r'.*r.*', texto_original)
Isso retorna todas as linhas ou substrings que contenham pelo menos um r. Simples. Funciona para a maioria dos casos. Mas cuidado com dois pontos que eu levei tempo pra aprender.
Pegadinha 1: r maiúsculo vs minúsculo
A regex acima só captura o r minúsculo. Se quiser ambos, use o flag re.IGNORECASE: resultado = re.findall(r'.*r.*', texto_original, re.IGNORECASE)
Isso faz diferença quando você lida com nomes próprios, siglas ou textos mal formatados. Num projeto real, eu ignorei esse flag na primeira versão e gastei duas horas caçando bug até perceber que "Maria" simplesmente não aparecia nos resultados.
Pegadinha 2: acentos e a letra r
Em português, a letra r não leva acento diretamente, mas palavras com ç, ã, õ, é, ê existem ao redor. Se seu texto vier de OCR ou upload de usuário, a codificação pode estar errada e o r sumir ou se transformar em algo indefinido. Sempre normalize a string antes: texto_normalizado = unicodedata.normalize('NFKD', texto_original).encode('ASCII', 'ignore').decode('ASCII')
👉 Clique no botão abaixo para saber mais sobre o assunto!
Isso remove acentos e caracteres problemáticos antes de aplicar a regex. Economiza dor de cabeça.
Alternativa sem regex
Se você não quer depender de expressões regulares, um filtro simples com listas de compreensão resolve rápido: resultado = [palavra for palavra in lista if 'r' in palavra.lower()]
É mais legível para iniciantes e ligeiramente mais lento em grandes volumes de dados. Para listas com menos de 50 mil itens, a diferença é irrelevante.
Cenários onde isso falha
O método regex baseado em .*r.* não diferencia contextos. Ele pega a palavra inteira mesmo que você queira só o que vem antes ou depois do r. Se o objetivo for isolar sílabas, nomes ou códigos específicos, você precisa de capturas grupadas: re.findall(r'(\w*)r(\w*)', texto)
Isso retorna tuplas com o trecho antes e depois do r em cada ocorrência. Mais útil, mas exige post-processamento.
Download de script pronto
Deixei um script completo disponível no meu repositório público que faz o seguinte:
- Lê um arquivo de texto
- Filtra linhas contendo r (maiúscula e minúscula)
- Gera um arquivo de saída separado
- Mostra estatísticas básicas
Disponível em formato .py no GitHub sob a pasta ferramentas-texto/. Basta clonar e rodar com python filtro_r.py arquivo_entrada.txt.
Quando evitar esse approccio
Se seu texto tem milhões de linhas, regex puro vai ser lento. Nesse caso, considere carregar os dados num DataFrame pandas e usar operações vetoriais, ou migrar para uma engine como DuckDB se o volume for realmente grande. A diferença pode sair de horas para minutos. Também não funciona bem para texto em línguas que usam alfabetos cirílicos ou árabes, onde a equivalência visual de "r" pode enganar sistemas baseados apenas em Unicode básico. Nessas situações, trate a codificação antes de qualquer filtro.