2
respostas

Dúvida sobre regex opcionais

Eu sei que a aula não é de regex porém me ocorreu duas dúvidas:

  1. Nem todos os e-mails terminam com ".com.br" - alguns são .com apenas e outros .com.de, .com.uk por exemplo. Para os .com.de ou .com.uk eu sei que é fácil basta eu colocar no final uma regex que valide 2 letras algo como [a-z]{2} porém e para o caso de apenas .com ? Eu consigo de alguma forma dizer que as duas letras do final são opcionais ?

  2. Muitos e-mails tem um ponto antes do @ por exemplo: jorge.rabello3@gmail.com - nesse caso a regex da aula padrao_email = "\w{5,50}@\w{3,10}[a-z].com.br" vai validar mas ao imprimir se perde a primeira parte no caso o print(resposta.group()) devolve rabello@gmail.com - como eu poderia fazer para validar esse tipo de e-mail ?

Grato desde já xD

2 respostas

A primeira dúvida é respondida em um exercício mais adiante ficando a regex assim:

padrao_email = "\w{2,50}@\w{2,15}\.[a-z]{2,3}\.?([a-z]{2,3})?"

porém e o caso onde antes do @ tem ponto por exemplo para o e-mail jorge.rabello3@gmail.com ?

Olá Jorge, tudo bem com você?

Peço desculpas pela demora em lhe responder.

Uma das formas que podemos buscar por e-mails que possuam ponto (.), traço (-) ou underscore (_) antes do arroba (@), podemos utilizar a seguinte expressão regular:

padrao = r"[a-z0-9._-]+@[a-z0-9.-]+\.[a-z]?.[a-z]"

Onde temos, da esquerda para a direita:

  • [a-z0-9._-] : Buscará por um conjunto de caracteres informados, antes do arroba (@), independente do tamanho.
  • + (mais): Informa que deverá haver uma ou mais ocorrência do conjunto informado anteriormente.
  • @[a-z0-9.-]:Buscará por um conjunto de caracteres informados, que deverá está após o arroba (@), independente do tamanho.
  • \ . (contra barra ponto): Retira a propriedade especial do ponto (.).
  • [a-z]: Buscará por um conjunto de letras após o ponto.
  • ?.[a-z]: Buscará por um ponto e um conjunto de letras, podendo = ou não ser informado.

Implementando em um código temos:

import re

padrao = r"[a-z0-9._-]+@[a-z0-9.-]+\.[a-z]?.[a-z]"

email = "Aqui está o email: jorger.abello3@gmail.com.br, favor cadastrar"

resposta = re.search(padrao, email)
print(resposta.group())

Resultado

jorger.abello3@gmail.com.br

Para saber um pouco mais sobre expressões regulares e sobre outros modos de validação, recomendo a leitura do seguinte artigo:

O artigo acima está em inglês, caso tenha dificuldades com o idioma, recomendo o uso do tradutor do navegador.

Em caso de dúvidas, encontro-me à disposição.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software