expresiones regulares python por google
Más información sobre las expresiones regulares
Anteriormente, aprendiste sobre las expresiones regulares y un par de símbolos que puedes usar para construir patrones de expresiones regulares. En esta lectura, explorarás símbolos de expresión regular adicionales que se pueden usar en un contexto de ciberseguridad. También aprenderás más sobre el módulo re y su función re.findall().
Conceptos básicos de las expresiones regulares
Una expresión regular (regex) es una secuencia de caracteres que forma un patrón. Puedes usarlas en Python para buscar una variedad de patrones. Esto podría incluir direcciones IP, correos electrónicos o identificadores de dispositivos.
Para acceder a expresiones regulares y funciones relacionadas en Python, primero debes importar el módulo re. Debes utilizar la siguiente línea de código para importar el módulo re:
import re
Las expresiones regulares se almacenan en Python como cadenas. Luego, estas se utilizan en las funciones del módulo re para buscar en otras cadenas. Hay muchas funciones en el módulo re, pero explorarás cómo funcionan las expresiones regulares a través de re.findall(). La función re.findall() devuelve una lista de coincidencias a una expresión regular. Requiere dos parámetros; el primero es la cadena que contiene el patrón de expresión regular, y el segundo es la cadena que deseas buscar.
Los patrones que comprenden una expresión regular consisten en caracteres alfanuméricos y símbolos especiales. Si un patrón de expresión regular consiste solo en caracteres alfanuméricos, Python revisará la cadena especificada para buscar coincidencias con este patrón y las devolverá. En el siguiente ejemplo, el primer parámetro es un patrón de expresión regular que consiste solo en los caracteres alfanuméricos "ts". El segundo parámetro, "tsnow, tshah, bmoreno", es la cadena que buscarás. Puedes ejecutar el siguiente código para explorar lo que devuelve:
El resultado es una lista de solo dos elementos, los dos coinciden con "ts": ['ts', 'ts'].
Si deseas hacer algo más que buscar cadenas específicas, debes incorporar símbolos especiales en tus expresiones regulares.
Símbolos para expresiones regulares
Símbolos para tipos de caracteres
Puedes usar una variedad de símbolos para formar un patrón para tu expresión regular. Algunos de estos símbolos identifican un tipo particular de carácter. Por ejemplo, \w coincide con cualquier carácter alfanumérico.
Puedes ejecutar este código para explorar lo que re.findall() devuelve al aplicar la expresión regular de "\w" a la ID de dispositivo de "h32rb17".
Debido a que cada carácter dentro de esta ID de dispositivo es alfanumérico, Python devuelve una lista con siete elementos. Cada elemento representa uno de los caracteres de la ID del dispositivo.
Puedes usar estos símbolos adicionales para que coincidan con tipos específicos de caracteres:
. coincide con todos los caracteres, incluidos los símbolos
\d coincide con todos los dígitos [0-9]
\s coincide con todos los espacios individuales
\. coincide con el carácter del período
El siguiente código busca en la misma ID de dispositivo que el ejemplo anterior, pero cambia el patrón de expresión regular a "\d". Cuando lo ejecutes, devolverá una lista diferente:
Esta vez, la lista contiene solo cuatro elementos. Cada elemento es uno de los dígitos numéricos de la cadena.
Símbolos para cuantificar ocurrencias
Otros símbolos cuantifican el número de ocurrencias de un carácter específico en el patrón. En un patrón de expresión regular, puedes agregarlos después de que un carácter o un símbolo identifique un tipo de carácter para especificar el número de repeticiones que coinciden con el patrón.
Por ejemplo, el símbolo + representa una o más ocurrencias de un carácter específico. En el siguiente ejemplo, el patrón lo coloca después del símbolo "\d" para encontrar coincidencias con una o más ocurrencias de un solo dígito:
Con la expresión regular "\d+", la lista contiene las dos coincidencias de "32" y "17".
Otro símbolo utilizado para cuantificar el número de ocurrencias es el símbolo *. El símbolo * representa cero, una o más ocurrencias de un carácter específico. El siguiente código sustituye el símbolo * por el + utilizado en el ejemplo anterior. Puedes ejecutarlo para examinar la diferencia:
Debido a que también coincide con cero ocurrencias, la lista ahora contiene cadenas vacías para los caracteres que no eran de un solo dígito.
Si deseas indicar un número específico de repeticiones a permitir, puedes colocar este número entre llaves ({ }) después del carácter o símbolo. En el siguiente ejemplo, el patrón de expresión regular "\d{2}" indica a Python que devuelva todas las coincidencias de exactamente dos dígitos seguidos de una cadena de múltiples ID de dispositivo:
Debido a que coincide con dos repeticiones, cuando Python se encuentra con un solo dígito, verifica si hay otro después de él. Si lo hay, Python agrega los dos dígitos a la lista y pasa al siguiente. Si no lo hay, pasa al siguiente dígito sin agregar el primero a la lista.
Nota: Python escanea cadenas de izquierda a derecha cuando se compara con una expresión regular. Cuando Python encuentra una parte de la cadena que coincide con el primer carácter esperado que ha sido definido en la expresión regular, continúa comparando los caracteres posteriores con el patrón esperado. Cuando el patrón se completa, este proceso comienza de nuevo. Entonces, en los casos en que aparecen tres dígitos en una fila, el tercero se toma como un nuevo dígito inicial.
También puedes especificar un rango dentro de las llaves separando dos números con una coma. El primer número es el número mínimo de repeticiones, y el segundo, el número máximo de repeticiones. El siguiente ejemplo arroja todas las coincidencias que tienen entre una y tres repeticiones de un solo dígito:
La lista devuelta contiene elementos de un dígito como "0", dos dígitos como "32" y tres dígitos como "825".
Cómo construir un patrón
Construir una expresión regular requiere que descompongas el patrón que estás buscando en trozos más pequeños y representes estos trozos a través de los símbolos que ya aprendiste. Revisa este ejemplo, en que una cadena contiene múltiples piezas de información sobre los empleados de una organización. Para cada empleado, la siguiente cadena contiene su ID de empleado, su nombre de usuario seguido de dos puntos (:), sus intentos de inicio de sesión del día y su área:
employee_logins_string = "1001 bmoreno: 12 Marketing 1002 tshah: 7 Human Resources 1003 sgilmore: 5 Finance"
Tu tarea es extraer el nombre de usuario y los intentos de inicio de sesión, sin el número de identificación o área del empleado.
Para completarla mediante expresiones regulares, debes dividir lo que estás buscando en componentes más pequeños. En este caso, esos componentes son el número variable de caracteres en un nombre de usuario, dos puntos, un espacio y un número variable de dígitos individuales. Los símbolos de expresión regular correspondientes son \w+, :, \s y \d+ respectivamente. Al utilizar estos símbolos como tu expresión regular, puedes ejecutar el siguiente código para extraer las cadenas:
Nota: Trabajar con expresiones regulares puede conllevar el riesgo de devolver información innecesaria o excluir cadenas que deseas devolver. Por lo tanto, es útil que pruebes tus expresiones regulares.
Conclusiones clave
Las expresiones regulares te permiten buscar a través de cadenas para encontrar coincidencias con patrones específicos. Puedes utilizar expresiones regulares importando el módulo re. Este módulo contiene múltiples funciones, entre ellas re.findall(), que devuelve todas las coincidencias a un patrón en forma de lista. Para formar un patrón, se utilizan caracteres y símbolos. Los símbolos te permiten especificar tipos de caracteres y cuantificar la cantidad de repeticiones de un carácter o tipo de carácter que pueden ocurrir en el patrón.
Comentarios
Publicar un comentario