- Ponto de interrogação: ?
- Asterisco: *
- Sinal de soma: +
Interrogação em Regex: ?
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