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:

pythontxt = '1 12 123'
res = re.sub('\d', '!', txt)

print(res)

Resultado de la ejecución del código:

python'! !! !!!'

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:

pythontxt = '1 12 123 abc @@@'
res = re.sub('\d+', '!', txt)

print(res)

Resultado de la ejecución del código:

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

pythontxt = '123abc3@@'
res = re.sub('\D+', '!', txt)

print(res)

Resultado de la ejecución del código:

python'123!3!'

Ejemplo

En este ejemplo, el patrón de búsqueda se ve así: carácter de espacio una vez:

pythontxt = '1 12 123 abc @@@'
res = re.sub('\s', '!', txt)

print(res)

Resultado de la ejecución del código:

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

pythontxt = '1 12 123 abc @@@'
res = re.sub('\S+', '!', txt)

print(res)

Resultado de la ejecución del código:

python'! ! ! ! !'

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

pythontxt = '1 12 123a Abc @@@'
res = re.sub('\w+', '!', txt)

print(res)

Resultado de la ejecución del código:

python'! ! ! ! @@@'

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:

pythontxt = '1 12 123 Abc @@@'
res = re.sub('\W+', '!', txt)

print(res)

Resultado de la ejecución del código:

python'1!12!123!Abc!'

Tareas prácticas

Задание 1

Dada la cadena:

pythontxt = '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.

Задание 2

Dada la cadena:

pythontxt = '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.

Задание 3

Dada la cadena:

pythontxt = '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').

Задание 4

Dada la cadena:

pythontxt = '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.

Задание 5

Dada la cadena:

pythontxt = '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.

Задание 6

Dada la cadena:

pythontxt = 'ave a#a a2a a$a a4a a5a a-a aca'

Escriba una expresión regular que reemplace todos los espacios por '!'.