Bandeiras para strings de expressões regulares em Python
Para definir bandeiras como um dos parâmetros opcionais para os métodos que trabalham com expressões regulares, usa-se a seguinte sintaxe:
flags=re.nome_da_bandeira
Principais bandeiras para trabalhar com expressões regulares
| Bandeira | Finalidade |
|---|---|
re.IGNORECASE |
Ignora o caso de escrita dos caracteres. |
re.DOTALL |
O ponto corresponde a qualquer caractere, incluindo quebra de linha. |
re.I |
Torna a pesquisa insensível ao caso. |
re.L |
Busca palavras de acordo com o idioma atual.
Esta interpretação afeta o grupo alfabético
(\w e \W), bem como
o comportamento do limite de palavra (\b e
\B).
|
re.M |
O caractere $ realiza a busca no final
de qualquer linha de texto (não apenas no final do texto)
e o caractere ^ realiza a busca no início
de qualquer linha de texto (não apenas no início
do texto).
|
re.S |
Altera o significado do ponto (.) para
corresponder a qualquer caractere, incluindo nova
linha.
|
re.U |
Interpreta letras de acordo com o
conjunto de caracteres Unicode. Esta bandeira afeta
o comportamento de \w, \W, \b,
\B. No Python 3+ esta bandeira
está definida por padrão.
|
re.X |
Permite a sintaxe de expressão regular multilinha.
Ele ignora espaços em branco dentro
do padrão (exceto espaços dentro
de um conjunto [] ou quando escapados
com uma barra invertida) e trata o
'#' não escapado como um comentário.
|
Exemplo
Com a bandeira re.IGNORECASE é possível
ignorar o caso dos caracteres. Vamos
ver como isso é feito. Neste exemplo,
a expressão regular encontrará apenas letras minúsculas:
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
Resultado da execução do código:
'! ! CCC DDD'
Exemplo
E agora adicionamos no quarto parâmetro
do método a bandeira re.IGNORECASE e a expressão regular
começará a buscar caracteres em todos os casos:
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
Resultado da execução do código:
'! ! ! !'
Exemplo
Vamos encontrar todas as quebras de linha com a expressão regular:
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
Resultado do código executado:
'aaa!bbb'
Exemplo
Mas, se for necessário substituir todos os caracteres, ao colocar um ponto na expressão regular, as quebras de linha não serão capturadas:
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
Resultado do código executado:
'!!!
!!!'
Exemplo
Para corrigir este erro, deve-se
aplicar a bandeira re.DOTALL:
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
Resultado do código executado:
'!!!!!!!'
Exemplo
No parâmetro, também podem ser passadas várias
bandeiras, colocando o operador + entre elas.
Vamos primeiro substituir a letra 'a'
no final da string:
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa
, '!', txt)
print(res)
Resultado do código executado:
'''
aaa
AAA
!
'''
Exemplo
Agora vamos definir a bandeira re.M:
res = re.sub('aaa
, '!', txt, flags=re.M)
print(res)
Resultado do código executado:
'''
!
AAA
!
'''
Exemplo
Agora vamos aplicar também a bandeira para ignorar o caso:
res = re.sub('aaa
, '!', txt, flags=re.M+re.IGNORECASE)
print(res)
Resultado do código executado:
'''
!
!
!
'''