O comando 'ou' em expressões regulares do Python
O comando '|', que representa
uma versão mais poderosa do 'ou'
em comparação com o comando [ ]. Este comando
permite dividir a expressão regular em várias
partes. Nesse caso, a correspondência pode se encaixar
em uma parte da expressão regular ou em
outra. Vamos ver exemplos.
Exemplo
Neste exemplo, o padrão de busca é:
três letras 'a' ou três letras
'b':
txt = 'aaa bbb abb'
res = re.sub('a{3}|b{3}', '!', txt)
print(res)
O resultado da execução do código:
'! ! abb'
Exemplo
Neste exemplo, o padrão de busca é:
três letras 'a' ou de 1 ou
mais letras 'b':
txt = 'aaa bbb bbbb bbbbb axx'
res = re.sub('a{3}|b+', '!', txt)
print(res)
O resultado da execução do código:
'! ! ! ! axx'
Exemplo
Neste exemplo, o padrão de busca é: uma ou mais letras ou três dígitos:
txt = 'a ab abc 1 12 123'
res = re.sub('[a-z]+|\d{3}', '!', txt)
print(res)
O resultado da execução do código:
'! ! ! 1 12 !'
Exemplo
A barra vertical pode dividir a expressão regular não em duas partes, mas em qualquer quantidade de partes:
txt = 'aaa bbb ccc ddd'
res = re.sub('a+|b+|c+', '!', txt)
print(res)
O resultado da execução do código:
'! ! ! ddd'
Exemplo
Se a barra vertical estiver dentro de parênteses,
o 'ou' funciona apenas
dentro desses parênteses.
Por exemplo, vamos encontrar as strings pelo
seguinte padrão: no início há ou
'a', ou 'b' uma ou mais
vezes, e depois duas letras 'x':
txt = 'axx bxx bbxx exx'
res = re.sub('(a|b+)xx', '!', txt)
print(res)
O resultado da execução do código:
'! ! ! exx'
Problemas práticos
Dada a string:
txt = 'aeeea aeea aea axa axxa axxxa'
Escreva uma expressão regular que encontre as strings
segundo o padrão: nas extremidades há letras
'a', e entre elas - ou a letra
'e' qualquer quantidade de vezes ou a letra
'x' qualquer quantidade de vezes.
Dada a string:
txt = 'aeeea aeea aea axa axxa axxxa'
Escreva uma expressão regular que encontre as strings
segundo o padrão: nas extremidades há letras
'a', e entre elas - ou a letra
'e' duas vezes ou a letra 'x'
qualquer quantidade de vezes.