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

Número de celular com mais caracteres

Olá, na aula é dado como exemplo o número de celular "1234-45678", e quando a função findall é utilizada (passando o padrão abaixo) é retornado o elemento '1234-4567'.

padrao = "[0-9]{4,5}[-]?[0-9]{4}"

Gostaria de saber se existe alguma forma de validação que "obrigue" o elemento retornado a ter exatamente 4 dígitos no final (caso tiver mais, não deve ser retornado) - busquei na documentação do Python porém não consegui encontrar uma resposta.

1 resposta
solução!

Olá Francisco, tudo bem com você?

Então o que você está querendo é utilizar o recurso de word boundary das expressões regulares, que é representado pelo símbolo \b, ela funciona como um âncora para limitar justamente uma quantidade máxima que queremos :)

Então o nosso padrão para limitar a quantidade teria que ficar da seguinte maneira:

padrao = r"\b[0-9]{4,5}[-]?[0-9]{4}\b"

Acrescentando o \b no começo e no final do nosso padrão é como dizer para a Regex que queremos apenas que contenha a palavra com aquele tamanho exato, não queremos nada antes e nem depois :)

Dessa forma números como 91234-5678888888888888 não serão capturados pela nossa Regex

Você pode estar se perguntando porque adicionei o r na frente da string, mas isso é para dizer para o python interpretar isso como um padrão "cru" de Regex, dessa maneira eu posso escrever o \b sem dar problemas, caso contrário eu teria que escrever \\b para ele entender :)

Aqui na Alura temos um curso completo de Regex: Expressões Regulares: Capturando texto de forma mágica, que é um curso completo sobre esse mundo!

E vou deixar aqui o link da aula que fala justamente sobre esse \b: Word Boundary

Abraços e Bons Estudos!