Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Expressões regulares com Python

Olá, boa noite!

Estou acompanhando o curso Python Brasil: validação de dados no padrão nacional e me surgiu uma dúvida. Tentei criar uma expressão regular para validar o CPF nos seguintes formatos:

XXX.XXX.XXX-XX - Com máscara XXXXXXXXXXX - Sem máscara

No entanto, ao aplicar o código abaixo obtenho o retorno CPF inválido

import re
cpf="49656939816"
padrao = re.compile("([0-9]{3}.[0-9]{3}.[0-9]{3}-[0-9]{2}) | ([0-9]{3}[0-9]{3}[0-9]{3}[0-9]{2})")
retorno = re.match(padrao, cpf)
if retorno:
    print("CPF válido")
else:
    print("CPF inválido")

Se eu aplico isoladamente apenas um dos padrões, o retorno passa a ser CPF válido.

cpf="49656939816"
padrao = re.compile("([0-9]{3}[0-9]{3}[0-9]{3}[0-9]{2})")
retorno = re.match(padrao, cpf)
if retorno:
    print("CPF válido")
else:
    print("CPF inválido")

O metacaractere "|" não deveria validar uma expressão ou outra ?

Poderiam me ajudar ?

1 resposta
solução!

Oi Raphael,

o problema no seu padrão é que tem espaços antes e depois do '|', então ele está buscando por uma string de números com pontuação e terminada com espaço ou uma string que inicia com espaço seguido apenas de números. Modifique seu padrão e rode novamente.

# com espacos
padrao = re.compile("([0-9]{3}.[0-9]{3}.[0-9]{3}-[0-9]{2}) | ([0-9]{3}[0-9]{3}[0-9]{3}[0-9]{2})")
# sem os espacos
padrao = re.compile("([0-9]{3}.[0-9]{3}.[0-9]{3}-[0-9]{2})|([0-9]{3}[0-9]{3}[0-9]{3}[0-9]{2})")