¿Alguna vez te has preguntado cuál es la clave para hallazgo texto en un documento, o asegurándose de que un texto se ajusta a algún formato, como una dirección de correo electrónico, por ejemplo, y otras operaciones similares?
La clave para tales operaciones es expresiones regulares (expresiones regulares). Veamos algunas definiciones para expresiones regulares. En Wikipedia, regex se define de la siguiente manera:
Una secuencia de caracteres que definen un patrón de búsqueda, principalmente para su uso en la coincidencia de patrones con cadenas, o en la cadena, es decir, operaciones similares a "buscar y reemplazar". El concepto surgió en la década de 1950, cuando el matemático estadounidense Stephen Kleene formalizó la descripción de un lenguaje regular, y entró en uso común con las utilidades de procesamiento de texto de Unix, un editor y grep, un filtro..
Otra buena definición de regular-expressions.info es:
Una expresión regular (regex o regexp para abreviar) es una cadena de texto especial para describir un patrón de búsqueda. Puedes pensar en las expresiones regulares como comodines en los esteroides. Probablemente esté familiarizado con las notaciones de comodines como * .txt para encontrar todos los archivos de texto en un administrador de archivos. El equivalente de expresiones regulares es. * \. Txt $
Sé que el concepto de expresiones regulares todavía puede sonar un poco vago. Entonces, veamos algunos ejemplos de expresiones regulares para entender mejor el concepto..
En esta sección, le mostraré algunos ejemplos de expresiones regulares para ayudarlo a comprender mejor el concepto..
Di que tenías este regex:
/ abder /
Esto simplemente nos está diciendo que coincidamos con la palabra abder
solamente.
¿Qué pasa con esta expresión regular??
/ a [nr] t /
Puede leer esta expresión regular como sigue: encuentre un patrón de texto tal que la primera letra sea una
y la ultima letra es t
, y entre esas letras viene cualquiera norte
o r
. Así que las palabras coincidentes son hormiga
y Art º
.
Déjame darte una pequeña prueba en este punto. ¿Cómo escribirías una expresión regular que comienza con California
, y termina con uno o todos los siguientes caracteres tbr
? Sí, esta expresión regular se puede escribir de la siguiente manera:
/ ca [tbr] /
Si ve una expresión regular que comienza con un acento circunflejo ^
, esto significa que coincida con la cadena que comienza con la cadena que se menciona después ^
. Por lo tanto, si tiene la expresión regular a continuación, coincide con la cadena que comienza con Esta
.
/ ^ Esto /
Así, en la siguiente cadena:
Mi nombre es Abder Esto es Abder Esto es Tom
Basado en el regex / ^ Esto /
, Las siguientes cadenas serán emparejadas:
Esto es Abder Esto es Tom
¿Y si quisiéramos unir una cadena que termina con alguna cuerda? En este caso, utilizamos el signo de dólar. PS
. Aquí hay un ejemplo:
Abder $
Por lo tanto, en la cadena anterior (las tres líneas), los siguientes patrones se combinarían con esta expresión regular:
Mi nombre es Abder Esto es Abder
Bueno, ¿qué te parece este regex??
^ [A-Z] [a-z]
Sé que puede parecer complejo a primera vista, pero vamos a verlo pieza por pieza.
Ya vimos lo que es un acento circunflejo. ^
es. Significa hacer coincidir una cadena que comienza con alguna cadena.. [ARIZONA]
se refiere a las letras mayúsculas. Entonces, si leemos esta parte de la expresión regular: ^ [A-Z]
, nos está diciendo que coincidamos con la cadena que comienza con una letra mayúscula. La ultima parte, [Arizona]
, significa que después de encontrar una cadena que comienza con una letra mayúscula, irá seguida de letras minúsculas del alfabeto.
Entonces, ¿cuál de las siguientes cadenas se emparejará usando esta expresión regular? Si no está seguro, puede usar Python como veremos en la siguiente sección para probar su respuesta..
abder Abder ABDER ABder
Las expresiones regulares son un tema muy amplio, y esos ejemplos son solo para darte una idea de lo que son y por qué los usamos.
Una buena referencia para aprender más sobre expresiones regulares y ver más ejemplos es RexEgg.
Ahora vamos a la parte divertida. Queremos ver cómo trabajar con algunas de las expresiones regulares anteriores en Python. El módulo que usaremos para trabajar con expresiones regulares en Python es el re
módulo.
El primer ejemplo fue sobre encontrar la palabra abder
. En Python, haríamos esto de la siguiente manera:
import re text = 'Mi nombre es Abder' match_pattern = re.match (r'Abder ', texto) imprimir match_pattern
Si ejecuta la secuencia de comandos de Python anterior, obtendrá el resultado: Ninguna
!
El script funciona bien, pero el problema está en cómo funciona la función. partido()
trabajos. Si volvemos a la re
Documentación del módulo, esto es lo que hace la función. partido()
hace:
Si cero o más caracteres al principio de la cadena coinciden con el patrón de expresión regular, devuelva un objeto de coincidencia correspondiente. Devuelve Ninguno si la cadena no coincide con el patrón; Tenga en cuenta que esto es diferente de una coincidencia de longitud cero.
Ajá, de esto podemos ver que partido()
devolverá un resultado solo si encuentra una coincidencia en el comenzando de la cuerda.
En su lugar podemos utilizar la función. buscar()
, que es, en base a la documentación:
Escanee a través de la cadena buscando la primera ubicación donde el patrón de expresión regular produce una coincidencia y devuelva un objeto de coincidencia correspondiente. Devuelva Ninguno si ninguna posición en la cadena coincide con el patrón; tenga en cuenta que esto es diferente de encontrar una coincidencia de longitud cero en algún punto de la cadena.
Por lo tanto, si escribimos el script anterior, pero con buscar()
en lugar de partido()
, Obtenemos la siguiente salida:
<_sre.SRE_Match object at 0x101cfc988>
Eso es un hacer coincidir el objeto
ha sido devuelto.
Si queremos devolver el resultado (coincidencia de cadena), usamos el grupo()
función. Si queremos ver todo el partido, usamos grupo (0)
. Así:
imprimir match_pattern.group (0)
devolverá la salida: Abder
.
Si tomamos el segundo regex en la sección anterior, es decir / a [nr] t /
, Se puede escribir en Python de la siguiente manera:
import re text = 'Esto es una hormiga negra' match_pattern = re.search (r'a [nr] t ', texto) imprimir match_pattern.group (0)
La salida para este script es: hormiga
.
El artículo se hace más largo y el tema de las expresiones regulares en Python seguramente toma más de un artículo, si no un libro por sí mismo..
Sin embargo, este artículo le brinda un inicio rápido y confianza para ingresar al mundo de las expresiones regulares en Python. Puede referirse a la re
documentación para aprender más sobre este módulo y cómo profundizar en el tema.