Banderas para cadenas de expresiones regulares en Python

Para establecer banderas como uno de los parámetros opcionales para los métodos que trabajan con expresiones regulares, se utiliza la siguiente sintaxis:

pythonflags=re.nombre_de_bandera

Banderas principales para trabajar con expresiones regulares

Bandera Propósito
re.IGNORECASE Ignorar mayúsculas y minúsculas.
re.DOTALL El punto coincide con cualquier carácter, incluido el de nueva línea.
re.I Hace que la búsqueda no distinga entre mayúsculas y minúsculas.
re.L Busca palabras de acuerdo al idioma actual. Esta interpretación afecta al grupo alfabético (\w y \W), así como al comportamiento del límite de palabra (\b y \B).
re.M El carácter $ busca al final de cualquier línea del texto (no solo al final del texto) y el carácter ^ busca al principio de cualquier línea del texto (no solo al principio del texto).
re.S Cambia el significado del punto (.) para que coincida con cualquier carácter, incluida la nueva línea.
re.U Interpreta las letras de acuerdo con el conjunto de caracteres Unicode. Esta bandera afecta el comportamiento de \w, \W, \b, \B. En Python 3+ esta bandera está establecida por defecto.
re.X Permite una sintaxis de expresión regular multilínea. Ignora los espacios en blanco dentro del patrón (excepto los espacios dentro de una clase [] o cuando se escapan con una barra invertida) y trata el '#' sin escapar como un comentario.

Ejemplo

Con la bandera re.IGNORECASE se puede ignorar las mayúsculas y minúsculas. Veamos cómo se hace. En este ejemplo, la expresión regular encontrará solo letras minúsculas:

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

print(res)

Resultado de la ejecución del código:

python'! ! CCC DDD'

Ejemplo

Y ahora agreguemos la bandera re.IGNORECASE en el cuarto parámetro del método y la expresión regular comenzará a buscar caracteres en todos los casos:

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

print(res)

Resultado de la ejecución del código:

python'! ! ! !'

Ejemplo

Encontremos con la expresión regular todos los saltos de línea:

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

print(res)

Resultado del código ejecutado:

python'aaa!bbb'

Ejemplo

Pero, si necesitamos reemplazar todos los caracteres, al poner un punto en la expresión regular, no se capturarán los saltos de línea:

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

print(res)

Resultado del código ejecutado:

python'!!!
!!!'

Ejemplo

Para corregir este error, se debe aplicar la bandera re.DOTALL:

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

Resultado del código ejecutado:

python'!!!!!!!'

Ejemplo

En el parámetro se pueden pasar varias banderas, colocando el operador + entre ellas. Primero reemplacemos la letra 'a' al final de la línea:

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

print(res)

Resultado del código ejecutado:

python'''
  aaa
  AAA
  !
'''

Ejemplo

Ahora establezcamos la bandera re.M:

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

Resultado del código ejecutado:

python'''
  !
  AAA
  !
'''

Ejemplo

Ahora apliquemos también la bandera para ignorar las mayúsculas y minúsculas:

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

Resultado del código ejecutado:

python'''
  !
  !
  !
'''