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".

Ejemplo de expresiรณn w+ y ^

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.

\s expresiรณn en la funciรณn re.split

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.

\s expresiรณn en la funciรณn re.split

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.

revancha()

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

utilizar la bรบsqueda()

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.

 Utilice re.findall() en Python

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.

Ejemplo de re.M o banderas multilรญnea

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()
re.findall() se utiliza para encontrar todas las apariciones de un patrรณn en una cadena.

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
\d representa cualquier dรญgito (0-9).

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)
re.split(r'\s', string) divide una cadena basรกndose en espacios utilizando la expresiรณn \s.

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.
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.

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()
  • Otra 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.

Resumir este post con: