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:
flags=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:
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
Resultado de la ejecución del código:
'! ! 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:
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
Resultado de la ejecución del código:
'! ! ! !'
Ejemplo
Encontremos con la expresión regular todos los saltos de línea:
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
Resultado del código ejecutado:
'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:
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
Resultado del código ejecutado:
'!!!
!!!'
Ejemplo
Para corregir este error, se debe
aplicar la bandera re.DOTALL:
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
Resultado del código ejecutado:
'!!!!!!!'
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:
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa
, '!', txt)
print(res)
Resultado del código ejecutado:
'''
aaa
AAA
!
'''
Ejemplo
Ahora establezcamos la bandera re.M:
res = re.sub('aaa
, '!', txt, flags=re.M)
print(res)
Resultado del código ejecutado:
'''
!
AAA
!
'''
Ejemplo
Ahora apliquemos también la bandera para ignorar las mayúsculas y minúsculas:
res = re.sub('aaa
, '!', txt, flags=re.M+re.IGNORECASE)
print(res)
Resultado del código ejecutado:
'''
!
!
!
'''