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:

pythonflags=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:

pythontxt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)

print(res)

Resultado da execução do código:

python'! ! 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:

pythontxt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)

print(res)

Resultado da execução do código:

python'! ! ! !'

Exemplo

Vamos encontrar todas as quebras de linha com a expressão regular:

pythontxt = '''aaa
  bbb'''
res = re.sub('\n', '!', txt)

print(res)

Resultado do código executado:

python'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:

pythontxt = '''aaa
  bbb'''
res = re.sub('.', '!', txt)

print(res)

Resultado do código executado:

python'!!!
!!!'

Exemplo

Para corrigir este erro, deve-se aplicar a bandeira re.DOTALL:

pythonres = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)

Resultado do código executado:

python'!!!!!!!'

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:

pythontxt = '''
  aaa
  AAA
  aaa'''
res = re.sub('aaa
, '!', txt)

print(res)

Resultado do código executado:

python'''
  aaa
  AAA
  !
'''

Exemplo

Agora vamos definir a bandeira re.M:

pythonres = re.sub('aaa
, '!', txt, flags=re.M)
print(res)

Resultado do código executado:

python'''
  !
  AAA
  !
'''

Exemplo

Agora vamos aplicar também a bandeira para ignorar o caso:

pythonres = re.sub('aaa
, '!', txt, flags=re.M+re.IGNORECASE)
print(res)

Resultado do código executado:

python'''
  !
  !
  !
'''