Python RegEx: re.match(), re.search(), re.findall() con ejemplo
¿Qué es la expresión regular en Python?
A Expresión regular (RE) en un lenguaje de programación es una cadena de texto especial que se utiliza para describir un patrón de búsqueda. Es extremadamente útil para extraer información de texto como código, archivos, registros, hojas de cálculo o incluso documentos.
Durante el uso de la Python En una expresión regular, lo primero que debemos reconocer es que todo es esencialmente un carácter, y estamos escribiendo patrones para que coincidan con una secuencia específica de caracteres, también denominada cadena. Las letras ascii o latinas son las que se encuentran en sus teclados y Unicode se usa para hacer coincidir el texto extranjero. Incluye dígitos y puntuación y todos los caracteres especiales como $#@!%, etc.
Por ejemplo, un Python Una expresión regular podría indicarle a un programa que busque texto específico en la cadena y luego imprima el resultado en consecuencia. La expresión puede incluir
- Coincidencia de texto
- Repetición
- Derivación
- Composición de patrones, etc.
Expresión regular o RegEx en Python se denota como RE (RE, expresiones regulares o patrón de expresiones regulares) se importan a través de re módulo. Python admite expresiones regulares a través de bibliotecas. expresiones regulares en Python admite varias cosas como Modificadores, identificadores y caracteres de espacios en blanco.
Identificadores | Modificadores | Caracteres de espacios en blanco | Es necesario escapar |
---|---|---|---|
\d= cualquier número (un dígito) | \d representa un dígito. Ejemplo: \d{1,5} declarará un dígito entre 1,5 como 424,444,545, etc. | \n = nueva línea | . + * ? [] $ ^ () {} | \ |
\D= cualquier cosa menos un número (que no sea un dígito) | + = coincide con 1 o más | \s= espacio | |
\s = espacio (tabulación, espacio, nueva línea, etc.) |
? = coincide con 0 o 1 | \t =pestaña | |
\S= cualquier cosa menos un espacio | * = 0 o más | \e = escapar | |
\w = letras (Coincide con caracteres alfanuméricos, incluido “_”) | $ coincide con el final de una cadena | \r = retorno de carro | |
\W =cualquier cosa menos letras (coincide con un carácter no alfanumérico excluyendo “_”) | ^ coincide con el inicio de una cadena | \f= avance de formulario | |
. = cualquier cosa menos letras (puntos) | | coincide con o x/y | ------ | |
\b = cualquier carácter excepto la nueva línea | [] = rango o “varianza” | ------ | |
\. | {x} = esta cantidad de código anterior | ------ |
Sintaxis de expresión regular (RE)
import re
- Módulo “re” incluido con Python Se utiliza principalmente para la búsqueda y manipulación de cadenas.
- También se usa frecuentemente para página web “Raspado”(extrae una gran cantidad de datos de sitios web)
Comenzaremos el tutorial de expresiones con este sencillo ejercicio usando las expresiones (w+) y (^).
Ejemplo de expresión w+ y ^
- “^”: Esta expresión coincide con el inicio de una cadena.
- “w+“: Esta expresión coincide con el carácter alfanumérico de la cadena
Aquí veremos un Python RegEx Ejemplo de cómo podemos usar las expresiones w+ y ^ en nuestro código. Cubrimos la función re.findall() en Python, más adelante en este tutorial, pero por un momento simplemente nos centraremos en las expresiones \w+ y \^.
Por ejemplo, para nuestra cadena "guru99, la educación es divertida", si ejecutamos el código con w+ y^, dará como resultado "guru99".
import re xx = "guru99,education is fun" r1 = re.findall(r"^\w+",xx) print(r1)
Recuerde, si elimina el signo + de w+, la salida cambiará y solo dará el primer carácter de la primera letra, es decir, [g]
Ejemplo de expresión \s en la función re.split
- “s”: Esta expresión se utiliza para crear un espacio en la cadena.
Para entender cómo funciona esta RegEx en Python funciona, comenzamos con un simple Python RegEx Ejemplo de una función dividida. En el ejemplo, hemos dividido cada palabra usando la función “re.split” y al mismo tiempo hemos usado la expresión \s que permite analizar cada palabra de la cadena por separado.
Cuando ejecute este código, obtendrá el resultado ['nosotros', 'somos', 'dividiendo', 'las', 'palabras'].
Ahora, veamos qué sucede si elimina "\" de s. No hay alfabeto 's' en la salida, esto se debe a que hemos eliminado '\' de la cadena y evalúa "s" como un carácter normal y, por lo tanto, divide las palabras dondequiera que encuentre "s" en la cadena.
Del mismo modo, existen una serie de otros Python expresión regular que puede utilizar de varias maneras en Python como \d,\D,$,\.,\b, etc.
Aquí está el código completo
import re xx = "guru99,education is fun" r1 = re.findall(r"^\w+", xx) print((re.split(r'\s','we are splitting the words'))) print((re.split(r's','split the words')))
A continuación, veremos los tipos de métodos que se utilizan con expresión regular en Python.
Usando métodos de expresión regular
El paquete "re" proporciona varios métodos para realizar consultas en una cadena de entrada. Veremos los métodos de re in Python:
- revancha()
- investigar()
- re.findall ()
Nota: : Basado en las expresiones regulares, Python ofrece dos operaciones primitivas diferentes. El método match busca una coincidencia solo al principio de la cadena, mientras que search busca una coincidencia en cualquier parte de la cadena.
revancha()
revancha() función de re en Python buscará el patrón de expresión regular y devolverá la primera aparición. El Python El método RegEx Match busca una coincidencia solo al principio de la cadena. Entonces, si se encuentra una coincidencia en la primera línea, devuelve el objeto coincidente. Pero si se encuentra una coincidencia en alguna otra línea, el Python La función RegEx Match devuelve nulo.
Por ejemplo, considere el siguiente código de Python Función re.match(). Las expresiones “w+” y “\W” coincidirán con las palabras que comienzan con la letra 'g' y, a partir de entonces, todo lo que no comience con 'g' no se identifica. Para verificar la coincidencia de cada elemento en la lista o cadena, ejecutamos el bucle for en este Python re.match() Ejemplo.
re.search(): encontrar un patrón en el texto
investigar() La función buscará el patrón de expresión regular y devolverá la primera aparición. A diferencia de Python re.match(), verificará todas las líneas de la cadena de entrada. El Python La función re.search() devuelve un objeto coincidente cuando se encuentra el patrón y "nulo" si no se encuentra el patrón
¿Cómo utilizar la búsqueda()?
Para utilizar la función de búsqueda (), debe importar Python re módulo primero y luego ejecute el código. El Python La función re.search() toma el "patrón" y el "texto" para escanear desde nuestra cadena principal
Por ejemplo aquí buscamos dos cadenas literales “Prueba de software” “guru99”, en una cadena de texto “Software Pruebas es divertido”. Para "pruebas de software" encontramos la coincidencia, por lo tanto, devuelve el resultado de Python re.search() Ejemplo como "encontré una coincidencia", mientras que para la palabra "guru99" no pudimos encontrarla en la cadena, por lo que devuelve el resultado como "No hay coincidencia".
re.findall ()
encuentra todos() El módulo se utiliza para buscar "todas" las ocurrencias que coinciden con un patrón determinado. Por el contrario, el módulo search() solo devolverá la primera aparición que coincida con el patrón especificado. findall() iterará sobre todas las líneas del archivo y devolverá todas las coincidencias de patrón que no se superpongan en un solo paso.
Cómo utilizar re.findall() en Python?
Aquí tenemos una lista de direcciones de correo electrónico y queremos que todas las direcciones de correo electrónico se extraigan de la lista, usamos el método re.findall() en PythonEncontrará todas las direcciones de correo electrónico de la lista.
Aquí está el código completo para el ejemplo de re.findall()
import re list = ["guru99 get", "guru99 give", "guru Selenium"] for element in list: z = re.match("(g\w+)\W(g\w+)", element) if z: print((z.groups())) patterns = ['software testing', 'guru99'] text = 'software testing is fun?' for pattern in patterns: print('Looking for "%s" in "%s" ->' % (pattern, text), end=' ') if re.search(pattern, text): print('found a match!') else: print('no match') abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com' emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc) for email in emails: print(email)
Python Banderas
Muchos Python Los métodos Regex y las funciones Regex toman un argumento opcional llamado Banderas. Estas banderas pueden modificar el significado de lo dado. Python Patrón de expresiones regulares. Para entenderlos veremos uno o dos ejemplos de estas Banderas.
Varias banderas utilizadas en Python incluye
Sintaxis para banderas Regex | ¿Qué hace esta bandera? |
---|---|
[movimiento rápido del ojo] | Haga que el inicio/final considere cada línea |
[re.yo] | Ignora el caso |
[re.S] | Hacer [ . ] |
[re.U] | Hacer que { \w,\W,\b,\B} siga las reglas Unicode |
[re.L] | Hacer que {\w,\W,\b,\B} siga la configuración regional |
[re.X] | Permitir comentarios en Regex |
Ejemplo de re.M o banderas multilínea
En el modo multilineal, el patrón de caracteres [^] coincide con el primer carácter de la cadena y el comienzo de cada línea (inmediatamente después de cada nueva línea). Mientras que la expresión minúscula “w” se utiliza para marcar el espacio con caracteres. Cuando se ejecuta el código, la primera variable “k1” solo imprime el carácter 'g' para la palabra guru99, mientras que cuando se agrega el indicador multilineal, se obtienen los primeros caracteres de todos los elementos de la cadena.
Aqui esta el codigo
import re xx = """guru99 careerguru99 selenium""" k1 = re.findall(r"^\w", xx) k2 = re.findall(r"^\w", xx, re.MULTILINE) print(k1) print(k2)
- Declaramos la variable xx para la cadena “guru99…. careerguru99….selenium”
- Ejecute el código sin usar banderas multilínea, solo da como resultado 'g' de las líneas
- Ejecute el código con el indicador "multilínea", cuando imprima "k2" el resultado será "g", "c" y "s".
- Entonces, la diferencia que podemos ver después y antes de agregar líneas múltiples en el ejemplo anterior.
Asimismo, también puedes utilizar otros Python banderas como re.U (Unicode), re.L (seguir configuración regional), re.X (permitir comentarios), etc.
Python 2 Ejemplo
Los códigos anteriores son Python 3 ejemplos, si quieres correr Python 2 Por favor considere el siguiente código.
# Example of w+ and ^ Expression import re xx = "guru99,education is fun" r1 = re.findall(r"^\w+",xx) print r1 # Example of \s expression in re.split function import re xx = "guru99,education is fun" r1 = re.findall(r"^\w+", xx) print (re.split(r'\s','we are splitting the words')) print (re.split(r's','split the words')) # Using re.findall for text import re list = ["guru99 get", "guru99 give", "guru Selenium"] for element in list: z = re.match("(g\w+)\W(g\w+)", element) if z: print(z.groups()) patterns = ['software testing', 'guru99'] text = 'software testing is fun?' for pattern in patterns: print 'Looking for "%s" in "%s" ->' % (pattern, text), if re.search(pattern, text): print 'found a match!' else: print 'no match' abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com' emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc) for email in emails: print email # Example of re.M or Multiline Flags import re xx = """guru99 careerguru99 selenium""" k1 = re.findall(r"^\w", xx) k2 = re.findall(r"^\w", xx, re.MULTILINE) print k1 print k2
Pon a prueba tu Python Conocimiento
1. ¿Qué método se utiliza para encontrar todas las ocurrencias de un patrón en una cadena?
- investigar()
- revancha()
- re.findall ()
- re.dividir()
2. ¿Qué representa la clase de carácter \d en expresiones regulares?
- Cualquier dígito (0-9)
- Cualquier carácter que no sea un dígito
- Cualquier carácter de espacio en blanco
- Cualquier letra o número
3. ¿Qué función usarías para dividir una cadena en función de espacios?
- re.split(r'\s', cadena)
- re.findall(r'\w+', cadena)
- re.match(r'\s+', cadena)
- re.split(r'\w+', cadena)
4. ¿Cuál es la principal diferencia entre re.match() y re.search()?
- re.match() busca un patrón al comienzo de una cadena, mientras que re.search() busca un patrón en cualquier parte de la cadena.
- re.match() devuelve todas las coincidencias, mientras que re.search() devuelve la primera coincidencia.
- re.search() es más rápido que re.match().
- Ambas funciones se comportan de la misma manera.
Resumen
Una expresión regular en un lenguaje de programación es una cadena de texto especial que se utiliza para describir un patrón de búsqueda. Incluye dígitos y puntuación y todos los caracteres especiales como $#@!%, etc. La expresión puede incluir literal
- Coincidencia de texto
- Repetición
- Derivación
- Composición de patrones, etc.
In Python, una expresión regular se indica como RE (RE, expresiones regulares o patrón de expresión regular) están incrustados a través de Python re módulo.
- Módulo “re” incluido con Python Se utiliza principalmente para la búsqueda y manipulación de cadenas.
- También se utiliza con frecuencia para “scraping” de páginas web (extrae una gran cantidad de datos de sitios web)
- Los métodos de expresión regular incluyen re.match(),re.search()& re.findall()
- Otros Python Los métodos de reemplazo RegEx son sub() y subn() que se utilizan para reemplazar cadenas coincidentes en re
- Python Banderas Muchos Python Los métodos Regex y las funciones Regex toman un argumento opcional llamado Banderas
- Estas banderas pueden modificar el significado del patrón Regex dado.
- Varios Python Los indicadores utilizados en los métodos Regex son re.M, re.I, re.S, etc.