Saltar al contenido

Expresiones regulares en Python – PythonForBeginners.com

¿Qué es una expresión regular?

Es un patrón de cadena escrito en una sintaxis compacta, que nos permite verificar rápidamente
si una cadena dada coincide o contiene un patrón dado.

El poder de las expresiones regulares es que pueden especificar patrones, no solo
caracteres fijos. Se pueden encontrar muchos ejemplos de estos artículos en:
Curso de Googles Python

Patrones básicos

a, X, 9
los personajes ordinarios simplemente coinciden exactamente entre sí.

. ^ $ * +? { [ ] | ()
metacaracteres con significados especiales (ver más abajo)

. (un período)
coincide con cualquier carácter, excepto la nueva línea ‘n’

w
coincide con un carácter de “palabra”: una letra, un dígito o una barra inferior [a-zA-Z0-9_].
Solo coincide con un carácter, no con una palabra completa.

W
coincide con cualquier carácter que no sea una palabra.

w +
coincide con una o más palabras / caracteres

B
límite entre palabra y no palabra

s
coincide con un solo carácter de espacio en blanco, espacio, nueva línea, retorno, tabulación, formulario

S
coincide con cualquier carácter que no sea un espacio en blanco.

t, n, r
pestaña, nueva línea, volver

D
coincide con cualquier cosa menos un dígito

D
coincide con un dígito decimal [0-9]

d {1,5}
coincide con un dígito entre 1 y 5 en longitudes.

Entrenamiento de Python recomendado

Para el entrenamiento de Python, nuestra principal recomendación es DataCamp.

{n} d {5}
coincide con 5 dígitos seguidos

^
coincidir con el inicio de la cadena

PS
coincidir con el del extremo de la cuerda

*
coincide con 0 o más repeticiones

?
coincide con 0 o 1 caracteres de lo que le precede

usar . para hacer coincidir un punto o para hacer coincidir una barra.

Si no está seguro de si un carácter tiene un significado especial, como ‘@’, puede
ponga una barra delante de él, @, para asegurarse de que se trata solo como un carácter.

re.findall

Findall () es probablemente la función más poderosa en el módulo re
y usaremos esa función en este script.

En el siguiente ejemplo, creamos una cadena que tiene un texto con muchos correos electrónicos.
direcciones.

Luego creamos una variable (correos electrónicos) que contendrá una lista de todos los
cadenas de correo electrónico.

Por último, usamos un bucle for con el que podemos hacer algo para cada cadena de correo electrónico.
que se encuentra.

str="purple [email protected], blah monkey [email protected] blah dishwasher"

## Here re.findall() returns a list of all the found email strings
emails = re.findall(r'[w.-][email protected][w.-]+', str) ## ['[email protected]', '[email protected]']
  
for email in emails:
    # do something with each found email string
    print email

También podemos aplicar esto para archivos. Si tiene un archivo y desea iterar
las líneas del archivo, simplemente introdúzcalo en findall () y deje que devuelva una lista de
todos los partidos en un solo paso

read () devuelve el texto completo de un archivo en una sola cadena.

(Si desea leer más sobre el manejo de archivos en Python, hemos escrito un
‘Cheat Sheet’ que puede encontrar aquí)

# Open file
f = open('test.txt', 'r')

# Feed the file text into findall(); it returns a list of all the found strings
strings = re.findall(r'some pattern', f.read())

investigación

El método re.search () toma un patrón de expresión regular y una cadena y
busca ese patrón dentro de la cadena.

La sintaxis es re.search (patrón, cadena).

dónde:
patrón
expresión regular que debe coincidir.

cuerda
la cadena que se buscará para que coincida con el patrón en cualquier parte de la cadena.

Busca la primera aparición del patrón RE dentro de una cadena con banderas opcionales.

Si la búsqueda tiene éxito, search () devuelve un objeto de coincidencia o None de lo contrario.

Por lo tanto, la búsqueda suele ser seguida inmediatamente por una sentencia if para probar
si la búsqueda tuvo éxito.

Es común usar la ‘r’ al comienzo de la cadena del patrón, que designa
una cadena de Python “sin procesar” que pasa a través de barras invertidas sin cambios, que es
muy útil para expresiones regulares.

Este ejemplo busca el patrón ‘palabra:’ seguido de una palabra de 3 letras.

El código match = re.search (pat, str) almacena el resultado de la búsqueda en una variable
llamado “partido”.

Luego, la sentencia if prueba la coincidencia, si es verdadera, la búsqueda tuvo éxito y
match.group () es el texto coincidente (por ejemplo, ‘palabra: gato’).

Si la coincidencia es falsa, la búsqueda no se realizó correctamente y no hay texto coincidente.

str="an example word:cat!!"

match = re.search(r'word:www', str)

# If-statement after search() tests if it succeeded
  if match:                      
    print 'found', match.group() ## 'found word:cat'

  else:
    print 'did not find'

Como puede ver en el siguiente ejemplo, he utilizado el | operador, que busca cualquiera de los patrones que especifique.

import re
programming = ["Python", "Perl", "PHP", "C++"]

pat = "^B|^P|i$|H$"

for lang in programming:
    
    if re.search(pat,lang,re.IGNORECASE):
        print lang , "FOUND"
    
    else:
        print lang, "NOT FOUND"

La salida del script anterior será:

Python ENCONTRADO
Perl ENCONTRADO
PHP ENCONTRADO
C ++ NO ENCONTRADO

re.sub

La función re.sub () en el módulo re puede usarse para reemplazar subcadenas.

La sintaxis de re.sub () es re.sub (patrón, respuesta, cadena).

Eso reemplazará las coincidencias en cadena con repl.

En este ejemplo, reemplazaré todas las apariciones del patrón re (“genial”)
en cadena (texto) con repl (“bueno”).

import re
text = "Python for beginner is a very cool website"
pattern = re.sub("cool", "good", text)
print text2

Aquí hay otro ejemplo (tomado de Clase de Googles Python ) que busca todo
las direcciones de correo electrónico y las cambia para mantener al usuario (1) pero
yo-yo-dyne.com como anfitrión.

str="purple [email protected], blah monkey [email protected] blah dishwasher" 

## re.sub(pat, replacement, str) -- returns new string with all replacements,

## 1 is group(1), 2 group(2) in the replacement

print re.sub(r'([w.-]+)@([w.-]+)', r'[email protected]', str)

## purple [email protected], blah monkey [email protected] blah dishwasher

re.compilar

Con la función re.compile () podemos compilar patrones en objetos patrón,
que tienen métodos para diversas operaciones, como la búsqueda de coincidencias de patrones
o realizar sustituciones de cuerdas.

Veamos dos ejemplos, usando la función re.compile ().

El primer ejemplo comprueba si la entrada del usuario contiene solo letras,
espacios o. (sin dígitos)

No se permite ningún otro personaje.

import re

name_check = re.compile(r"[^A-Za-zs.]")

name = raw_input ("Please, enter your name: ")

while name_check.search(name):
    print "Please enter your name correctly!"
    name = raw_input ("Please, enter your name: ")

El segundo ejemplo verifica si la entrada del usuario contiene solo números,
paréntesis, espacios o guiones (sin letras)

No se permite ningún otro personaje

import re

phone_check = re.compile(r"[^0-9s-()]")

phone = raw_input ("Please, enter your phone: ")

while phone_check.search(phone):
    print "Please enter your phone correctly!"
    phone = raw_input ("Please, enter your phone: ")

La salida del script anterior será:

Por favor, ingrese su teléfono: s

¡Ingrese su teléfono correctamente!

Continuará preguntando hasta que ingrese solo números.

Buscar dominio de correo electrónico en la dirección

Terminemos este artículo sobre expresiones regulares en Python con una secuencia de comandos ordenada que
encontrado en desbordamiento de pila.

@
escanea hasta que veas este personaje

[w.]
un conjunto de caracteres para coincidir potencialmente, por lo que w son todos caracteres alfanuméricos,
y el período final. se suma a ese conjunto de caracteres.

+
uno o más del conjunto anterior.

Debido a que esta expresión regular coincide con el carácter de punto y cada alfanumérico
después de una @, coincidirá con los dominios de correo electrónico incluso en medio de las oraciones.

import re

s="My name is Conrad, and [email protected] is my email."

domain = re.search("@[w.]+", s)

print domain.group()

salidas:
@ gmail.com

Más lectura

https://developers.google.com/edu/python/regular-expressions
http://www.doughellmann.com/PyMOTW/re/
http://www.daniweb.com/

Entrenamiento de Python recomendado

Para el entrenamiento de Python, nuestra principal recomendación es DataCamp.