Enviar um café pro programador

Ponto de Interrogação, Asterisco e Sinal de Adição em Regex (Tutorial parte 4)

Neste quarto tutorial sobre Regex em Python, vamos aprender a usar três caracteres importantes em expressões regulares:
  1. Ponto de interrogação: ?
  2. Asterisco: *
  3. Sinal de soma: +

Interrogação em Regex: ?

Usamos o símbolo de interrogação ? quando queremos que um determinado padrão seja opcional.
Ou seja, se tiver lá, ok. Se não tiver, ok também.

A regex é assim:
  • r'padrao1 (padrao2)? padrao3'

Ou seja, vai em busca do padrao1, tem que ter ele.
Já o padrao2 é um grupo opcional, não é obrigatório que esteja lá, pois usamos o caractere ?
Por fim, busca o padrao3.

Por exemplo, vamos fazer script que detecta os seguintes formatos de número de telefone:
xx yyyy-zzzz
xx yyyyzzzz

Ou seja, o hífen é opcional. Tanto faz se o usuário digitar ou não.
Se é tanto faz, temos que usar o caractere de interrogação ?




Veja como fica o código:

import re

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

 minhaRegex = re.compile(r'\d{2} \d{4}(-)?\d{4}?')
 resultado = minhaRegex.search(texto)
 print(resultado.group())

Note que, como tem grupos na Regex, usamos os métodos compile e o search.
A única de diferente que fizemos foi colocar o hífen num grupo (parêntesis) e colocamos o ? depois dele, pra simbolizar que ele é opcional.

Veja agora:
Certificado do curso (para trabalhar como programador profissional)

Asterisco em Regex: *

O símbolo de asterisco, em expressões regulares em Python, quer dizer 'corresponde a zero ou mais ocorrências'. Ele vem depois de um grupo, e quer dizer:
'Ei, esse padrão aqui, pode ocorrer nenhuma vez, uma, duas, três...um milhão, tanto faz'

Por exemplo, vamos supor que queiramos detectar os seguintes padrões de números de telefone:
  • xx yyyy-zzzz
  • xxyyyy-zzzz
  • xx  yyyy-zzzz
  • xx       yyyy-zzzz

Ou seja, entre o DDD e o número pode ter nenhum espaço, um, dois, vários espaços (nunca duvide da capacidade do usuário de fazer me..sbla).


Tudo que temos que fazer é adicionar o grupo: ( )*
Ele diz: "Python, pode ter um espaço vazio aí, nenhum, talvez dois...ou 1 bilhão, ok?'

Vejamos como fica nosso script:

import re

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

 minhaRegex = re.compile(r'\d{2}( )*\d{4}-\d{4}?')
 resultado = minhaRegex.search(texto)
 print(resultado.group())


Leia: Apostila Python Progressivo

Sinal de Adição em Regex Python: +

O caractere de adição tem uma função bem parecida com o de asterisco.
A diferença é que, no asterisco, ele corresponde a zero ou mais ocorrências de um determinado grupo.

No símbolo de adição, ele corresponde a uma ou mais ocorrências daquele determinado grupo.
Ou seja, aquela ocorrência tem que ocorrer pelo menos uma vez.

Se você desejar que sua regex detectadora de número de telefone tenha pelo menos um espaço entre o DDD e o número, para detectar:
  • xx yyyy-zzzz
  • xx  yyyy-zzzz
  • xx   yyyy-zzzz

Basta colocar + após grupo ( ). Veja como fica nosso código Python:

import re

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

 minhaRegex = re.compile(r'\d{2}( )+\d{4}-\d{4}?')
 resultado = minhaRegex.search(texto)
 print(resultado.group())


Cheias de possibilidades, essas regex, não ?

Nenhum comentário:

Postar um comentário