Expresiones regulares de Python con ejemplos

Expresiones regulares de Python con ejemplos

Una expresión regular (a menudo abreviada a "regex") es una técnica, y un patrón textual, que define cómo uno quiere buscar o modificar una cadena dada. Las expresiones regulares se usan comúnmente en scripts de shell bash y en el código de Python, así como en otros lenguajes de programación.

En este tutorial aprenderás:

  • Cómo comenzar con expresiones regulares en Python
  • Cómo importar el módulo de Regex Python
  • Cómo hacer coincidir las cuerdas y los caracteres utilizando notación regex
  • Cómo usar las notaciones más comunes de Python Regex
Expresiones regulares de Python con ejemplos

Requisitos y convenciones de software utilizados

Requisitos de software y convenciones de línea de comandos de Linux
Categoría Requisitos, convenciones o versión de software utilizada
Sistema Cualquier sistema operativo GNU/Linux
Software Python 2, Python 3
Otro Acceso privilegiado a su sistema Linux como root o a través del sudo dominio.
Convenciones # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominio
ps - Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado

Ejemplos de expresiones regulares de Python

En Python, uno quiere importar el re módulo para habilitar el uso de expresiones regulares.

Ejemplo 1 Comencemos con un ejemplo simple:

$ python3 python 3.8.2 (predeterminado, 27 de abril 2020, 15:53:34) [GCC 9.3.0] en Linux Tipo "Ayuda", "Copyright", "Créditos" o "Licencia" para obtener más información. >>> Imprimir ('Hello World') Hello World >>> Importar re >>> Imprimir (RE.Partido ('^.','Hola Mundo')) 
Copiar

Aquí primero imprimimos Hola Mundo Línea 5to demostrar una configuración de impresión simple. Luego importamos el módulo regex re Línea 7enable para usar el .fósforo Función regular de la línea de expresión 8 de esa biblioteca.

La sintaxis del .fósforo la función es (patrón, cadena) donde el patrón se definió como la expresión regular ^.'Y usamos lo mismo Hola Mundo cadena como nuestra cadena de entrada.

Como puede ver, se encontró una coincidencia en la carta H. La razón por la que se encontró esta coincidencia es el patrón de la expresión regular, a saber; ^ representa Inicio de la cadena y . representa coincidir con cualquier personaje (excepto Newline).

De este modo, H se encontró, ya que esa letra es directamente después de "el inicio de la cadena", y se describe como "cualquier personaje, H en este caso".

SABÍAS?
Estas connotaciones especiales son idénticas a las expresiones regulares en las secuencias de comandos bash, y otras aplicaciones conscientes de regex, todas utilizan un estándar de regex uniforme más o menos, aunque existen diferencias entre los idiomas e incluso las implementaciones específicas si profundiza un poco en expresiones regulares más.

Ejemplo 2

>>> imprimir (RE.Match ('... W', 'Hola mundo') 
Copiar

Aquí usamos . para que coincida con cualquier personaje (excepto Newline) y lo hacemos 6 veces antes de hacer coincidir el personaje literal W.

Como se puede ver Hola W (7 caracteres) se combinó. Curiosamente, este espectáculo como Span (0,7) que no debe leerse como 0-7 (que es 8 caracteres) pero como "Comienza en 0" "+7 caracteres", como también se puede mirar de los otros ejemplos en esto. artículo.

Ejemplo 3 Tomemos otro ejemplo un poco más complejo:

>>> imprimir (RE.Match ('^h [elo]+', 'Hola mundo')) 
Copiar

La sintaxis en este caso es:

  • ^: Como se describió anteriormente, también se puede leer como 'Este debe ser el comienzo de la cadena'
  • H: debe coincidir con H En esta ubicación exacta (que está directamente después/en el inicio de la cadena)
  • [Elo]+: coincide con mi,l o O (el 'o' definido por [' y ']) y + significa 'uno o más de estos'

De este modo, Hola fue emparejado como H estaba de hecho al comienzo de la cadena, y mi y O y l fueron emparejados una o más veces (en cualquier orden).

Ejemplo 3 Ready para uno súper complejo?

>>> imprimir (RE.findall ('^[he]+ll [o \ t]+wo [rl].+$ ',' Hello World ')) [' Hello World '];
Copiar

Aquí utilizamos otra función del módulo RE, a saber encuentra todos que produce inmediatamente la cadena encontrada y usa la misma sintaxis (patrón, cadena).

Por qué Hola Mundo Partido en su totalidad? Vamos a desglosarlo paso a paso:

  • ^: Inicio de la cadena
  • [Él]+: Partidos H y mi 1 o más veces, y por lo tanto Él se combina
  • LL: coincidencia literal de LL en este lugar exacto, y por lo tanto, de hecho LL se combina como vino directamente después Él
  • [O \ t]+: Coincide con " (espacio), o O, o \ t (una pestaña), y que 1 o más veces, y por lo tanto O (o espacio) emparejado. Si hubiéramos usado una pestaña en lugar de un espacio, esta regex aún funcionaría!
  • Wo: Partido literal de Wo
  • [RL]: coincide con riñonal o l. Mira cuidadosamente; solo riñonal se combina aquí! No hay + detrás de la ] Entonces solo un personaje, ya sea riñonal o l se combinará en esta posición. Entonces, ¿por qué estaba RLD Todavía coincidía? La respuesta está en el siguiente calificador;
  • .+: coincidir con cualquier personaje (significado por .) una o más veces, así l y d ambos coinciden y nuestra cadena está completa
  • ps: Similar a ^, Este personaje significa "End of String".

En otras palabras, si hubiéramos colocado esto al principio, o en otro lugar en el medio, el Regex habría coincidente.

Como ejemplo:

>>> imprimir (RE.findall ('^hola $', 'hola mundo')) [] >>> imprimir (re.findall ('^hola $', 'hola')) [] >>> imprimir (re.findall ('^hola $', 'hola')) ['hola'] >>> imprimir (re.findall ('^hola', 'hola mundo') ['hola']
Copiar

Aquí no se devuelve ninguna salida para las dos primeras impresiones, ya que estamos tratando de hacer coincidir una cadena que se puede leer como "start_of_string"-Hola-"End_of_string" como se indica por ^Hola $, contra Hola Mundo que no coincide.

En el tercer ejemplo, el ^Hola $ partidos Hola Como no hay personajes adicionales en el Hola cadena que causaría que esta regex falla coincidir. Finalmente, el último ejemplo muestra una coincidencia parcial sin el requisito de que suceda el "end_of_string" ($).

Ver? Ya te estás convirtiendo en un experto en expresiones regulares! Las expresiones regulares pueden ser divertidas y son muy poderosas!

Ejemplo 4
Hay varias otras funciones en el re Módulo de pitón, como re.sub, re.dividir, re.subvención, re.buscar, cada uno con sus dominios de casos de uso aplicables. Veamos a Re.SUB Siguiente:

>>> imprimir (RE.sub ('^hola', 'adiós', 'hola mundo')) adiós mundo
Copiar

La sustitución de cadenas es una de las aplicaciones más poderosas de expresiones regulares, en Python y otros lenguajes de codificación. En este ejemplo, buscamos ^Hola y lo reemplazó con Adiós en la cuerda Hola Mundo. ¿Puede ver cómo esto sería muy útil procesar todo tipo de variables y cadenas de texto e incluso archivos de texto planos completos??



Ejemplo 5
Veamos algunos ejemplos más complejos, utilizando una sintaxis de regex más avanzada:

>>> imprimir (RE.sub ('[0-9]+', '_', 'Hola mundo 123')) Hello World _
Copiar
  • [0-9]+: Cualquier personaje numérico de 0 a 9, una o más veces.

¿Puedes ver cómo el 123 fue reemplazado por un solo _ ?

Ejemplo 6

>>> imprimir (RE.sub('(?i) [o-r]+',' _ ',' Hola mundo 123 ')) Hell_ W_ld 123
Copiar
  • (?i) [O-R]+: Coincide con uno o más O a Riñonal o - gracias a lo opcional i bandera - O a riñonal
  • (?i): preestablecido un caso insensible i bandera para este patrón
>>> imprimir (RE.sub ('[1] 2', '_', 'Hola mundo 111')) Hello World _1
Copiar
  • [1] 2: Coincide con el personaje 1 Exactamente dos veces

Ejemplo 7

>>> imprimir (RE.sub ('(mundo)', '\ g \ g', 'Hola mundo 123')) Hola WorldWorld 123
Copiar
  • (Mundo): Haga coincidir el texto literal 'mundo' y conviértelo en un grupo que luego se puede usar en la sustitución
  • \ g \ g: El \gramo Especifica el primer grupo que coincidió, yo.mi. el texto Mundo Tomado del Hola mundo 123 cadena, y esto se repite dos veces, lo que resulta en el Mundo mundo producción. /li>

Ejemplo 8

Para aclarar esto, considere los siguientes dos ejemplos:

>>> imprimir (RE.sub ('(o)', '\ g \ g \ g', 'Hello World 123')) Hellooo Wooorld 123
Copiar

En este primer ejemplo, simplemente coincidimos O y colóquelo en un grupo, luego repita ese grupo tres veces en la salida.

Tenga en cuenta que si no nos referimos al Grupo 1 (el primer grupo coincidente, el segundo ejemplo de la Ref), entonces simplemente no habría resultado y el resultado sería:

>>> imprimir (RE.sub ('(o)', ", 'Hola mundo 123')) Hell Wrld 123
Copiar

Para el segundo ejemplo, considere:

>>> imprimir (RE.sub ('(o).*(r) ',' \ g \ g ',' Hello World 123 ')) Hellorld 123
Copiar

Aquí tenemos dos grupos, el primero es O (Donde sea que un grupo así coincida, y hay claramente múltiples como se ve en el primer ejemplo), y el segundo es riñonal. Además, usamos .* que se traduce en "cualquier personaje, cualquier cantidad de veces", una expresión regular a menudo utilizada.

Entonces en este ejemplo o Wor coincide con (o).*(r) '(' o Primero, luego cualquier personaje hasta el último riñonal es alcanzado. La noción "The Last" es muy importante y un error fácil de cometer un error, especialmente para los nuevos usuarios de expresiones regulares. Como ejemplo de lado, considere:

>>> imprimir (RE.sub ('e.*o ',' _ ',' Hola mundo 123 ')) H_RLD 123
Copiar

¿Puedes ver cómo el último O fue emparejado?

Volviendo a nuestro ejemplo:

>>> imprimir (RE.sub ('(o).*(r) ',' \ g \ g ',' Hello World 123 ')) Hellorld 123
Copiar

Podemos ver eso o Wor fue reemplazado por un partido del Grupo 1 seguido de un partido del Grupo 2, lo que resultó en: o Wor siendo reemplazado por o y así la salida es Hellorld 123.



Conclusión

Veamos algunas de las anotaciones de expresiones regulares más comunes disponibles en Python, combinadas con algunas implementaciones livianas de las mismas:

Lista de las notaciones de expresión regulares de Python más comunes
Anotación de regex Descripción
. Cualquier personaje, excepto Newline
[C.A] Un carácter de la gama seleccionada, en este caso A, B, C
[ARIZONA] Un carácter de la gama seleccionada, en este caso A-Z
[0-9AF-Z] Un carácter de la gama seleccionada, en este caso 0-9, A y F-Z
[^A-Za-Z] Un personaje fuera de la gama seleccionada, en este caso, por ejemplo, '1' calificaría
* Cualquier número de partidos (0 o más)
+ 1 o más partidos
? 0 o 1 partido
3 Exactamente 3 partidos
() Grupo de captura. La primera vez que se usa, el número de grupo es 1, etc.
\gramo Use (insertar) del grupo de coincidencia de captura, calificado por el número (1-x) del grupo
\gramo Grupo especial 0 inserta toda la cadena emparejada
^ Inicio de la cadena
ps Final de la cuerda
\d Un dígito
\D Un no dígito
\s Un espacio blanco
\S Un espacio no blanco
(?i) Ignorar el prefijo de la bandera del caso, como se demostró anteriormente
A | D Un personaje de los dos (una alternativa al uso []), 'A' o 'D'
\ Escapa de los caracteres especiales
\b Personaje de Backspace
\norte Carácter nuevo
\ r Carácter de retorno del carro
\ t Pestañas carácter

Interesante? Una vez que comience a usar expresiones regulares, en cualquier idioma, pronto descubrirá que comienza a usarlas en todas partes, en otros lenguajes de codificación, en su editor de texto favorito de Regex -Award, en la línea de comandos (consulte 'SED' para usuarios de Linux), etc.

Es probable que también encuentre que comenzará a usarlos más ad-hoc, yo.mi. no solo en la codificación. Hay algo inherentemente poderoso para poder controlar todo tipo de salida de línea de comandos, por ejemplo, directorio y listados de archivos, secuencias de comandos y administración de texto de archivo plano.

Disfrute de su progreso de aprendizaje y publique algunos de sus ejemplos de expresión regulares más potentes a continuación!



Tutoriales de Linux relacionados:

  • Bash Regex avanzado con ejemplos
  • Bash regexps para principiantes con ejemplos
  • Mastering Bash Script Loops
  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Cosas para instalar en Ubuntu 20.04
  • Bucles anidados en guiones Bash
  • Manipulación de Big Data para diversión y ganancias Parte 3
  • Manejo de la entrada del usuario en scripts bash
  • Crear redireccionamiento y reescribir reglas en .Htaccess en Apache ..
  • Mint 20: Mejor que Ubuntu y Microsoft Windows?