Expresiones regulares de Python con ejemplos
- 925
- 254
- Berta Solano
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
Requisitos y convenciones de software utilizados
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 dominiops - 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".
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
oO
(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
ymi
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 hechoLL
se combina como vino directamente despuésÉl
- [O \ t]+: Coincide con
"
(espacio), oO
, o\ t
(una pestaña), y que 1 o más veces, y por lo tantoO
(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
ol
. Mira cuidadosamente; soloriñonal
se combina aquí! No hay+
detrás de la]
Entonces solo un personaje, ya seariñonal
ol
se combinará en esta posición. Entonces, ¿por qué estabaRLD
Todavía coincidía? La respuesta está en el siguiente calificador; - .+: coincidir con cualquier personaje (significado por
.
) una o más veces, asíl
yd
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
a9
, 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
aRiñonal
o - gracias a lo opcionali
bandera -O
ariñ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 textoMundo
Tomado delHola mundo 123
cadena, y esto se repite dos veces, lo que resulta en elMundo 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:
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?
- « Cómo instalar códecs y extras de terceros en Manjaro Linux
- Cómo instalar un paquete de Aur en Manjaro Linux »