Grupos de caracteres em expressões regulares Python
Existem comandos especiais que
permitem selecionar grupos inteiros de
caracteres de uma vez. O comando \d significa um dígito
de 0 a 9. O comando \w
representa um dígito, uma letra latina ou o sinal
de sublinhado. O comando \s representa
um espaço ou um caractere de espaço em branco: espaço,
quebra de linha, tabulação. É possível inverter
o significado do comando, escrevendo com letra maiúscula:
por exemplo, se \d é um dígito, então
\D é um não dígito.
Exemplo
Vamos encontrar todos os dígitos:
txt = '1 12 123'
res = re.sub('\d', '!', txt)
print(res)
Resultado da execução do código:
'! !! !!!'
Exemplo
Os operadores de repetição consideram os comandos de grupo
como um todo, ou seja, parênteses de agrupamento
não são necessários. No próximo exemplo, o padrão de busca
se parece com isto: dígito de 0 a
9 uma ou mais vezes:
txt = '1 12 123 abc @@@'
res = re.sub('\d+', '!', txt)
print(res)
Resultado da execução do código:
'! ! ! abc @@@'
Exemplo
No próximo exemplo, o padrão de busca se parece
com isto: qualquer coisa uma ou mais vezes,
mas não um dígito de 0 a 9:
txt = '123abc3@@'
res = re.sub('\D+', '!', txt)
print(res)
Resultado da execução do código:
'123!3!'
Exemplo
Neste exemplo, o padrão de busca se parece com isto: caractere de espaço em branco uma vez:
txt = '1 12 123 abc @@@'
res = re.sub('\s', '!', txt)
print(res)
Resultado da execução do código:
'1!12!123!abc!@@@'
Exemplo
Neste exemplo, o padrão de busca se parece
com isto: NÃO é um caractere de espaço em branco uma ou mais
vezes. Todas as substrings, separadas por
espaços, serão substituídas por '!':
txt = '1 12 123 abc @@@'
res = re.sub('\S+', '!', txt)
print(res)
Resultado da execução do código:
'! ! ! ! !'
Exemplo
Neste exemplo, o padrão de busca se parece
com isto: dígito ou letra uma ou mais
vezes. Todas as substrings, consistindo de dígitos
e letras, serão substituídas por '!':
txt = '1 12 123a Abc @@@'
res = re.sub('\w+', '!', txt)
print(res)
Resultado da execução do código:
'! ! ! ! @@@'
Exemplo
Neste exemplo, o padrão de busca se parece
com isto: NÃO é um dígito E NÃO é uma letra uma ou mais
vezes. Esta definição no nosso
caso inclui '@@@' e todos os espaços
(eles também não são dígitos nem letras).
Preste atenção ao fato de que no final há um
'!' - nele foi transformada a string
' @@@' - com um espaço na frente:
txt = '1 12 123 Abc @@@'
res = re.sub('\W+', '!', txt)
print(res)
Resultado da execução do código:
'1!12!123!Abc!'
Problemas práticos
Dada a string:
txt = 'a1a a2a a3a a4a a5a aba aca'
Escreva uma expressão regular que encontre as strings,
nas quais nas extremidades existem letras 'a',
e entre elas um único dígito.
Dada a string:
txt = 'a1a a22a a333a a4444a a55555a aba aca'
Escreva uma expressão regular que encontre as strings,
nas quais nas extremidades existem letras 'a',
e entre elas qualquer quantidade de dígitos.
Dada a string:
txt = 'aa a1a a22a a333a a4444a a55555a aba aca'
Escreva uma expressão regular que encontre as strings,
nas quais nas extremidades existem letras 'a',
e entre elas qualquer quantidade de dígitos (incluindo
também zero dígitos, ou seja, a string
'aa').
Dada a string:
txt = 'avb a1b a2b a3b a4b a5b abb acb'
Escreva uma expressão regular que encontre strings
do seguinte tipo: nas extremidades existem letras
'a' e 'b', e entre elas -
não é um número e nem um espaço.
Dada a string:
txt = 'ave a#b a2b a$b a4b a5b a-b acb'
Escreva uma expressão regular que encontre strings
do seguinte tipo: nas extremidades existem letras
'a' e 'b', e entre elas -
não é uma letra, não é um dígito e nem um espaço.
Dada a string:
txt = 'ave a#a a2a a$a a4a a5a a-a aca'
Escreva uma expressão regular que substitua todos
os espaços por '!'.