Operadores de repetição de caracteres em regex
Há situações em que é necessário indicar que
um caractere se repete um determinado número
de vezes. Se o número exato de repetições é desconhecido,
pode-se simplesmente escrevê-lo várias vezes
- 'aaaa'. Mas o que fazer se for preciso
dizer algo como: repetir uma ou mais
vezes?
Para isso existem os operadores (quantificadores)
de repetição: o sinal de mais + (uma ou mais
vezes), o asterisco * (zero ou mais
vezes) e o ponto de interrogação ? (zero ou uma vez).
Esses operadores atuam sobre o caractere
que os precede.
Vamos ver o funcionamento desses operadores com exemplos.
Exemplo
Vamos encontrar todas as substrings pelo padrão letra
'x', letra 'a' uma ou mais
vezes, letra 'x':
txt = 'xx xax xaax xaaax xbx'
res = re.sub('xa+x', '!', txt)
print(res)
Resultado da execução do código:
'xx ! ! ! xbx'
Exemplo
Vamos encontrar todas as substrings pelo padrão letra
'x', letra 'a' zero ou mais
vezes, letra 'x':
txt = 'xx xax xaax xaaax xbx'
res = re.sub('xa*x', '!', txt)
print(res)
Resultado da execução do código:
'! ! ! ! xbx'
Exemplo
Vamos encontrar todas as substrings pelo padrão letra
'x', letra 'a' zero ou uma
vez, letra 'x':
txt = 'xx xax xaax xbx'
res = re.sub('xa?x', '!', txt)
print(res)
Resultado da execução do código:
'! ! xaax xbx'
Problemas práticos
Dada a string:
txt = 'aa aba abba abbba abca abea'
Escreva uma expressão regular que encontre as strings
'aba', 'abba', 'abbba'
seguindo o padrão: letra 'a', letra
'b' qualquer número de vezes, letra
'a'.
Dada a string:
txt = 'aa aba abba abbba abca abea'
Escreva uma expressão regular que encontre as strings
'aa', 'aba', 'abba',
'abbba' seguindo o padrão: letra
'a', letra 'b' qualquer número de vezes
(incluindo zero vezes), letra
'a'.
Dada a string:
txt = 'aa aba abba abbba abca abea'
Escreva uma expressão regular que encontre as strings
'aa', 'aba' seguindo o padrão:
letra 'a', letra 'b' uma
vez ou nenhuma, letra 'a'.
Dada a string:
txt = 'aa aba abba abbba abca abea'
Escreva uma expressão regular que encontre as strings
'aa', 'aba', 'abba',
'abbba', sem capturar 'abca'
e 'abea'.