Grupos de caracteres en expresiones regulares de Python
Existen comandos especiales que
permiten seleccionar grupos enteros
de caracteres a la vez. El comando \d significa dígito
del 0 al 9. El comando \w
denota un dígito, una letra latina o el signo
de subrayado. El comando \s denota
un espacio o un carácter de espacio: espacio,
salto de línea, tabulación. Se puede invertir
el valor del comando escribiendo una letra mayúscula:
por ejemplo, si \d es un dígito, entonces
\D es un no dígito.
Ejemplo
Encontremos todos los dígitos:
txt = '1 12 123'
res = re.sub('\d', '!', txt)
print(res)
Resultado de la ejecución del código:
'! !! !!!'
Ejemplo
Los operadores de repetición consideran los comandos-grupos
como un todo, es decir, los paréntesis de agrupación
no son necesarios. En el siguiente ejemplo, el patrón de búsqueda
se ve así: dígito del 0 al
9 una o más veces:
txt = '1 12 123 abc @@@'
res = re.sub('\d+', '!', txt)
print(res)
Resultado de la ejecución del código:
'! ! ! abc @@@'
Ejemplo
En el siguiente ejemplo, el patrón de búsqueda se ve
así: cualquier cosa una o más veces,
pero no un dígito del 0 al 9:
txt = '123abc3@@'
res = re.sub('\D+', '!', txt)
print(res)
Resultado de la ejecución del código:
'123!3!'
Ejemplo
En este ejemplo, el patrón de búsqueda se ve así: carácter de espacio una vez:
txt = '1 12 123 abc @@@'
res = re.sub('\s', '!', txt)
print(res)
Resultado de la ejecución del código:
'1!12!123!abc!@@@'
Ejemplo
En este ejemplo, el patrón de búsqueda se ve
así: carácter NO de espacio una o más
veces. Todas las subcadenas, separadas por
espacios, serán reemplazadas por '!':
txt = '1 12 123 abc @@@'
res = re.sub('\S+', '!', txt)
print(res)
Resultado de la ejecución del código:
'! ! ! ! !'
Ejemplo
En este ejemplo, el patrón de búsqueda se ve
así: dígito o letra una o más
veces. Todas las subcadenas, que consisten en dígitos
y letras, serán reemplazadas por '!':
txt = '1 12 123a Abc @@@'
res = re.sub('\w+', '!', txt)
print(res)
Resultado de la ejecución del código:
'! ! ! ! @@@'
Ejemplo
En este ejemplo, el patrón de búsqueda se ve
así: NO dígito y NO letra una o más
veces. En nuestro caso, bajo esta definición
cae '@@@' y todos los espacios
(ya que tampoco son dígitos ni letras).
Preste atención al hecho de que al final hay un
'!' - en él se transformó la cadena
' @@@' - con un espacio al frente:
txt = '1 12 123 Abc @@@'
res = re.sub('\W+', '!', txt)
print(res)
Resultado de la ejecución del código:
'1!12!123!Abc!'
Tareas prácticas
Dada la cadena:
txt = 'a1a a2a a3a a4a a5a aba aca'
Escriba una expresión regular que encuentre las cadenas
en las que en los bordes hay letras 'a',
y entre ellas un dígito.
Dada la cadena:
txt = 'a1a a22a a333a a4444a a55555a aba aca'
Escriba una expresión regular que encuentre las cadenas
en las que en los bordes hay letras 'a',
y entre ellas cualquier cantidad de dígitos.
Dada la cadena:
txt = 'aa a1a a22a a333a a4444a a55555a aba aca'
Escriba una expresión regular que encuentre las cadenas
en las que en los bordes hay letras 'a',
y entre ellas cualquier cantidad de dígitos (incluyendo
también cero dígitos, es decir, la cadena
'aa').
Dada la cadena:
txt = 'avb a1b a2b a3b a4b a5b abb acb'
Escriba una expresión regular que encuentre cadenas
del siguiente tipo: en los bordes hay letras
'a' y 'b', y entre ellas -
no un número y no un espacio.
Dada la cadena:
txt = 'ave a#b a2b a$b a4b a5b a-b acb'
Escriba una expresión regular que encuentre cadenas
del siguiente tipo: en los bordes hay letras
'a' y 'b', y entre ellas -
no una letra, no un dígito y no un espacio.
Dada la cadena:
txt = 'ave a#a a2a a$a a4a a5a a-a aca'
Escriba una expresión regular que reemplace todos
los espacios por '!'.