Mandar um café pro programador

Pode me ajudar a transformar cafeína em código?

Criando Expressões Regulares Longas e Complexas (Tutorial de Regexparte 9)

Neste tutorial de Regex em Python, vamos aprender como nos organizar para criar nossas expressões regulares longas e complexas.

Modo verbose: re.VERBOSE


Ao estudar expressões regulares, você foi, aos poucos, entendendo aquela sopa de letrinhas e passou a fazer o maior sentido para você.

Mas mostre aquilo para sua mãe ou amigos, vão achar que você ficou doido, está escrevendo em um dialeto alienígena e vão querer te internar.

E não é pra menos, a medida que nossas regex vão ficando mais longas e complexas, vai ficando muito mais difícil de entender elas, isso pois os símbolos ficam 'grudados' um nos outros.

Para facilitar e resolver isso, existe um argumento do método re.compile chamado re.VERBOSE que vai ignorar todo o espaços em brancos e comentários na string que define a regex.

Ou seja, basta fazer: re.compile(r'padrao', re.VERBOSE)

Detectando Números de telefone

Agora vamos fazer o script definitivo, que encontra todo e qualquer número de telefone em um texto, site, arquivo extenso ou o que for.

Se tiver dois dígitos de DDD ou não, 4 números e depois 4 números, ele detecta.



  • Primeiro grupo

Primeiro, temos que detectar o DDD.
Ele pode aparecer de uma das seguintes maneiras:
xx
(xx)

Regex pro primeiro caso: \d{2}
Regex do segundo caso: \(\d{2}\)

Como pode ser um ou outro, colocamos um pipe | entre essas duas possibilidades.
Como pode acontecer de o DDD nem ter sido digitado, colocamos uma interrogação após esse grupo.



  • Segundo grupo

Aqui, depois do DDD, pode ter algum espaçamento ou não.
Representamos isso assim: (\s*)?

O asterisco é pra caso tenha várias espaços.
A interrogação é que esse grupo pode existir ou não.


  • Terceiro grupo
Agora, vem os 4 primeiros dígitos do telefone em si:
(\d{4})

  • Quatro grupo
Agora, pode ser que exista um hífen ou algum espaçamento.
Pode ter um ou mais espaçamento: \s*
Pode ter um hífen, vários, under line ou o que seja: .*

Como pode ser um ou outro, colocamos um pipe | entre eles

  • Quinto grupo
Por fim, os quatro últimos dígitos:
(\d{4})

Nosso código Python fica:

import re

while True:
	texto = input("Digite sua string: " )

	minhaRegex = re.compile(r'''(
			(\d{2}|\(\d{2}\))?		# código de área
			(\s*)?				# espaço
			(\d{4})				# primeiros 3 dígitos
			(\s*|.*)			# separador
			(\d{4})				# últimos 4 dígitos
			)''', re.VERBOSE)
	minhaRegex = minhaRegex.search(texto)
	
	print(minhaRegex.group())
	

Veja que colocamos entre aspas triplas, para poder quebrar em várias linhas.
Também, fizemos um comentário sobre cada grupo, para facilitar o entendimento.

Ficou bacana, não ficou ?

Regex para detectar um endereço de e-mail

Um endereço de e-mail é composto de:
  1. Nome de usuário
  2. Arroba
  3. Nome do domínio
  4. Ponto
  5. Extensão do domínio (com, com.br, net, pt etc)

Nosso código fica:
emailRegex = re.compile(r'''(
      [a-zA-Z0-9._%+-]+		# nome do usuário
      @				# arroba
      [a-zA-Z0-9.-]+    	# domínio
      (\.[a-zA-Z]{2,4})   	# ponto seguido de outros caracteres
      )''', re.VERBOSE)



Ou seja, o nome deve conter pelo menos um caractere (maiúsculo ou minúsculo, ou algum dígito), seguido de @, depois a mesma regex para nomes, um ponto mais 2 a 4 caracteres.

Nenhum comentário:

Postar um comentário

Bora fazer evoluir o ensino da Programação no Brasil ?

Que tal apoiar e fazer crescer o ensino da programação no Brasil ?

Ajudar nosso país a crescer e se desenvolver cada vez mais, tecnologicamente?

Clica abaixo pra saber mais!

Apoiar o Projeto Progressivo