Capturar CPFs em textos com erros de digitação é um desafio comum, mas com uma expressão regular bem construída, você pode extrair esses dados com precisão, mesmo quando há caracteres incorretos ou formatações variadas. Este método é eficaz porque combina flexibilidade para lidar com diferentes padrões e robustez para ignorar entradas inválidas.
Um CPF válido tem 11 dígitos, geralmente formatado como XXX.XXX.XXX-XX. No entanto, em textos com erros, podemos encontrar variações como falta de pontos, hífen, ou até mesmo caracteres extras. A regex deve ser flexível o suficiente para capturar essas variações.
regex_cpf = r'\b\d{3}[.\s-]?\d{3}[.\s-]?\d{3}[-.\s]?\d{2}\b'
Abaixo está um exemplo de como usar a regex em Python para extrair CPFs de um texto:
import re
texto = "Aqui estão alguns CPFs: 123.456.789-09, 98765432100, 111 222 333 44, e alguns inválidos como 123.456.78-90."
# Expressão regular para capturar CPFs
pattern = r'\b\d{3}[.\s-]?\d{3}[.\s-]?\d{3}[-.\s]?\d{2}\b'
# Encontre todas as correspondências
cpfs = re.findall(pattern, texto)
print(cpfs)
Após extrair os CPFs, é importante validar se eles são realmente válidos. Você pode usar uma função de validação de CPF para filtrar os resultados:
def validar_cpf(cpf):
cpf = ''.join(filter(str.isdigit, cpf))
if len(cpf) != 11:
return False
# Cálculo dos dígitos verificadores
# (Implementação do algoritmo de validação de CPF)
return True
# Filtrar CPFs válidos
cpfs_validos = [cpf for cpf in cpfs if validar_cpf(cpf)]
print(cpfs_validos)
| Texto de Entrada | CPFs Capturados | CPFs Válidos |
|---|---|---|
| Meus CPFs: 123.456.789-09, 98765432100, 111 222 333 44 | 123.456.789-09, 98765432100, 111 222 333 44 | 123.456.789-09, 98765432100 |
| CPFs inválidos: 123.456.78-90, 111.222.333-44 | 123.456.78-90, 111.222.333-44 | 111.222.333-44 |
Com este método, você pode capturar CPFs mesmo em textos com erros de digitação, garantindo que apenas os dados válidos sejam processados. A combinação de regex flexível e validação rigorosa torna este processo eficiente e confiável, economizando tempo e reduzindo erros manuais.