English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial básico de Python

Control de flujo de Python

Funciones en Python

Tipos de datos en Python

Operaciones de archivos de Python

Objetos y clases de Python

Fecha y hora de Python

Conocimientos avanzados de Python

Manual de referencia de Python

Expresiones regulares (RegEx) en Python

En este tutorial, aprenderás a usar expresiones regulares (RegEx) y a usar el módulo re de Python con RegEx (con la ayuda de ejemplos).

Una expresión regular (RegEx) es una secuencia de caracteres que define un patrón de búsqueda. Por ejemplo:

^a...s$

El código anterior define el patrón RegEx. El patrón es:enaque comienza consque termina enCualquier cadena de cinco letras.

Los patrones definidos con RegEx se pueden usar para coincidir con cadenas de caracteres.

expresióncadena¿Coincide?
^a...s$absNo hay coincidencias
aliasCoincide
abyssCoincide
AliasNo hay coincidencias
Un ábacoNo hay coincidencias

Python tiene un módulo llamado reRegEx. Aquí hay un ejemplo:

import re
pattern = '^a...s$'
test_string = 'abyss'
result = re.match(pattern, test_string)
if result:
  print("La búsqueda fue exitosa.")
else:
  print("La búsqueda no fue exitosa.")

Aquí, utilizamos la función re.match() para buscar patrones en la cadena de prueba. Si la búsqueda tiene éxito,该方法devolverá un objeto de coincidencia. Si no, devolverá None.

reEl módulo define otras funciones que se pueden usar con RegEx. Antes de explorar, aprendamos sobre la expresión regular en sí.

Si ya conoce los fundamentos de RegEx, salte aPython RegEx.

Especificar un patrón utilizando expresiones regulares

Para especificar una expresión regular, se utilizan caracteres metálicos. En el ejemplo anterior, ^ y $ son caracteres metálicos.

caracteres meta

Los caracteres meta son los caracteres que el motor de RegEx interpreta de manera especial. A continuación se muestra una lista de caracteres meta:

[] . ^ $ * + ? {} () \ |

[] - Los corchetes

Los corchetes especifican el conjunto de caracteres que desea coincidir。

expresióncadena¿Coincide?
[abc]a1coincidencias
ac2coincidencias
Hey JudeNo hay coincidencias
abc de ca5coincidencias

Aquí, [abc] coincidirá, si desea coincidir con cualquier a, b o c en la cadena.

También puede usar-El rango de caracteres dentro de los corchetes。

  • [a-e] es equivalente a [abcde]。

  • [1-4] es equivalente a [1234]。

  • [0-39] es equivalente a [01239]。

Puede usar el símbolo ^ al principio de los corchetes para complementar (inverter) el conjunto de caracteres.

  • [^abc] representa lo que no esaorborcfueradecualquier carácter.

  • [^0-9] representa cualquier carácter no numérico.

.- El punto

El punto . coincide con cualquier carácter individual (excepto el carácter de nueva línea '\n').

expresióncadena¿Coincide?
..aNo hay coincidencias
ac1coincidencias
acd1coincidencias
acde2un elemento coincidente (contiene)4caracteres)

^- El símbolo de inserción

El símbolo de inserción ^ se utiliza para verificar si la cadena

expresióncadena¿Coincide?
^aa1coincidencias
abc1coincidencias
bacNo hay coincidencias
^ababc1coincidencias
acbsin coincidencia (comienza con, a pero sin b después)

$- El símbolo de dólar

El símbolo de dólar $ se utiliza para verificar si la cadenaenun carácter específicofinal.

expresióncadena¿Coincide?
a$a1coincidencias
formula1coincidencias
cabNo hay coincidencias

*- El símbolo de asterisco

El símbolo de asterisco * coincide con*Coincidecero o más vecesdel patrón restante.

expresióncadena¿Coincide?
ma*nmn1coincidencias
man1coincidencias
maaan1coincidencias
main+
woman1coincidencias

+- El símbolo de suma

El símbolo de suma + coincide con+Coincideuno o másdel patrón restante.

expresióncadena¿Coincide?
ma+nmnsin coincidencia (sin carácter a)
man1coincidencias
maaan1coincidencias
mainsin coincidencia (a seguido de n)
woman1coincidencias

?- El símbolo de interrogación

El símbolo de interrogación ? coincide conaparece cero o una vezdel patrón restante.

expresióncadena¿Coincide?
ma?nmn1coincidencias
man1coincidencias
maaansin coincidencia (más de un carácter a)
mainsin coincidencia (a seguido de n)
woman1coincidencias

{}- los corchetes

Considerando el siguiente código: {n,m}. Esto significa que al menos se debe mantenern vecesestilo, y como máximo se repitenm vecesestilo.

expresióncadena¿Coincide?
a{2,3}abc datNo hay coincidencias
abc daat1un coincidencia (en) daat
aabc daaat2un elemento coincidente (ubicado)aabc y) daaat
aabc daaaat2un elemento coincidente (ubicado)aabc y) daaaat

Vamos a intentar otro ejemplo. RegEx [0-9]{2, 4} coincide con al menos2una pero no más de4una

expresióncadena¿Coincide?
[0-9]{2,4}ab123csde1un coincidencia (coincidencia en) ab123csde
12 and 3456732coincidencias (ubicadas)12 and 345673
1 and 2No hay coincidencias

|- La barra vertical

La barra vertical | se utiliza para mostrar alternativamente (operador de or).

expresióncadena¿Coincide?
a|bcdeNo hay coincidencias
ade1un coincidencia (coincidencia en)ade)
acdbea3coincidencias (ubicadas)acdbea

Aquí, a|b coincide con cualquier cadena que contengaaorla de bcadena

()- Los paréntesis

Los paréntesis () se utilizan para agrupar subpatrones. Por ejemplo, (a|b|c)xz coincide con cualquier cadena que contengaaorborc匹配且后跟xz的cadena

expresióncadena¿Coincide?
(a|b|c)xzab xzNo hay coincidencias
abxz1个匹配(在处匹配)abxz
axz cabxz2coincidencias (ubicadas)axzbc cabxz

\- 反斜杠

La barra invertida \ se utiliza para escapar varios caracteres, incluyendo todos los caracteres meta. Por ejemplo,

\$a Si la cadena contiene $ seguido de a, entonces coincide. En este caso, el motor de RegEx no lo interpreta de manera especial.

Si no está seguro de si un carácter tiene un significado especial, puede colocarlo antes de\ . Esto asegura que el carácter no se trate de manera especial.

Secuencias especiales

Las secuencias especiales hacen que sea más fácil escribir patrones comunes. A continuación se muestra una lista de secuencias especiales:

\A -Coincide si el carácter especificado está al principio de la cadena.

expresióncadena¿Coincide?
\Atheel solCoincide
En el solNo hay coincidencias

\b -Coincide si el carácter especificado está al principio o al final de la palabra.

expresióncadena¿Coincide?
\bfoofootballCoincide
a footballCoincide
afootballNo hay coincidencias
foo\bel fooCoincide
el afoo testCoincide
el afootestNo hay coincidencias

\B-con\b. Si el carácter especificadono estáal principio o al final de la palabra, entonces coincide.

expresióncadena¿Coincide?
\BfoofootballNo hay coincidencias
a footballNo hay coincidencias
afootballCoincide
foo\Bel fooNo hay coincidencias
el afoo testNo hay coincidencias
el afootestCoincide

\d-Coincide con cualquier carácter decimal. Equivalente a [0-9]

expresióncadena¿Coincide?
\d12abc33coincidencias (ubicadas)12abc3
PythonNo hay coincidencias

\D-Coincide con cualquier carácter no decimal. Equivalente a [^0-9]

expresióncadena¿Coincide?
\D1ab34"503coincidencias (ubicadas)1ab34"50
1345No hay coincidencias

\s-Coincide en cualquier lugar de la cadena que contenga cualquier carácter de espacio. Equivalente a [ \t\n\r\f\v].

expresióncadena¿Coincide?
\sPython RegEx1coincidencias
PythonRegExNo hay coincidencias

\S-Coincide en cualquier lugar de la cadena que contenga cualquier carácter no en blanco. Equivalente a [^ \t\n\r\f\v].

expresióncadena¿Coincide?
\Sa b2coincidencias (ubicadas) a b
   No hay coincidencias

\w-Coincide con cualquier carácter alfanumérico (números y letras). Equivalente a [a-zA-Z0-9_]. Por cierto, el subrayado _ también se considera un carácter alfanumérico.

expresióncadena¿Coincide?
\w12&": ;c3coincidencias (ubicadas)12&": ;c
%"> !No hay coincidencias

\W-Coincide con cualquier carácter no alfanumérico. Equivalente a [^a-zA-Z0-9_]

expresióncadena¿Coincide?
\W1a2%c1coincidencias (en)1a2%c
PythonNo hay coincidencias

\Z -Coincide si el carácter especificado está al final de la cadena.

expresióncadena¿Coincide?
\ZPythonMe gusta Python1coincidencias
Me gusta PythonNo hay coincidencias
Python es divertido.No hay coincidencias

Consejo:Para construir y probar expresiones regulares, puede usar herramientas de prueba de RegEx, comoregexEsta herramienta no solo puede ayudarlo a crear expresiones regulares, sino también a aprenderlas.

Ahora que ha entendido los fundamentos de RegEx, discutamos cómo se utiliza RegEx en el código de Python.

Expresiones regulares de Python

Python tiene un módulo llamado re para expresiones regulares. Para usarlo, necesitamos importar el módulo.

import re

Este módulo define algunas funciones y constantes que se pueden usar con RegEx.

re.findall()

El método re.findall() devuelve una lista de cadenas que contiene todas las coincidencias.

Example1:re.findall()

# Programar para extraer números de una cadena
import re
string = 'hello 12 hi 89. Howdy 34'
pattern = '\d'+'
result = re.findall(pattern, string,) 
print(result)
# Salida: ['12>>> match.groups()89>>> match.groups()34]

Si no se encuentra el patrón, re.findall() devuelve una lista vacía.

re.split()

El método split divide la cadena coincidente y devuelve una lista de cadenas donde se produjo la división.

Example2:re.split()

import re
string = 'Twelve:12 Eighty nine:89.
pattern = '\d'+'
result = re.split(pattern, string,) 
print(result)
# Salida: ['Twelve:', '  Eighty nine:', '.']

Si no se encuentra el patrón, re.split() devuelve una lista que contiene una cadena vacía.

Puede pasar el parámetro maxsplit al método re.split(). Esto es el número máximo de divisiones que ocurrirán.

import re
string = 'Twelve:12 Eighty nine:89 Nine:9.
pattern = '\d'+'
# maxsplit = 1
# Dividir solo en la primera ocurrencia
result = re.split(pattern, string,) 1( 
print(result)
# Salida: ['Twelve:', '  Eighty nine:',89 Nine:9.']

Por cierto, el valor predeterminado de maxsplit es 0; el valor predeterminado es 0. Esto significa que se dividirá en todos los resultados coincidentes.

re.sub()

Sintaxis de re.sub():

re.sub(pattern, replace, string)

Este método devuelve una cadena donde las coincidencias se reemplazan por el contenido de la variable replace.

Example3:re.sub()

# Programar para eliminar todos los espacios
import re
# Cadenas multilínea
string = 'abc 12\
de 23 \n f45 6'
# Coincidencia de todos los caracteres de espacio
pattern = '\s+'
# Cadena vacía
replace = ""
new_string = re.sub(pattern, replace, string) 
print(new_string)
# Salida: abc12de23f456

Si no se encuentra el patrón, re.sub() devuelve la cadena original.

Puede pasar el parámetro maxsplit al método re.split(). Esto es el número máximo de divisiones que ocurrirán.countSe pasa como cuarto parámetro al método re.sub(). Si se omite, el resultado es 0. Esto reemplazará todas las coincidencias que se encuentren.

import re
# Cadenas multilínea
string = 'abc 12\
de 23 \n f45 6'
# Coincidencia de todos los caracteres de espacio
pattern = '\s+'
replace = ""
new_string = re.sub(r'\s'+', replace, string, 1( 
print(new_string)
# Salida:
# abc12de 23
# f45 6

re.subn()

re.subn() es similar a re.sub(), se espera que devuelva un tupla que contiene2Un tupla con un proyecto, que contiene la nueva cadena y la cantidad de veces que se realiza el reemplazo.

Example4:re.subn()

# Programar para eliminar todos los espacios
import re
# Cadenas multilínea
string = 'abc 12\
de 23 \n f45 6'
# Coincidencia de todos los caracteres de espacio
pattern = '\s+'
# Cadena vacía
replace = ""
new_string = re.subn(pattern, replace, string) 
print(new_string)
# Salida: ('abc12de23f456', 4(

re.search()

El método re.search() toma dos parámetros: patrón y cadena. Este método busca la primera posición de la coincidencia entre el patrón RegEx y la cadena.

Si la búsqueda tiene éxito, re.search() devuelve un objeto de coincidencia. Si no es así, devuelve None.

match = re.search(pattern, str)

Example5:re.search()

import re
string = "Python es divertido"
# Verificar si "Python" está al principio
match = re.search('\APython', string)
if match:
  print("patrón encontrado dentro de la cadena")
else:
  print("patrón no encontrado")  
# Salida: patrón encontrado dentro de la cadena

Aquí,matchcontiene un objeto match.

Objeto de coincidencia

Puede usardir()La función obtiene métodos y propiedades del objeto de coincidencia.

Algunos métodos y propiedades comunes del objeto de coincidencia son:

match.group()

El método group() devuelve la parte coincidente de la cadena.

Example6:Objeto de coincidencia

import re
string = '39801 356, 2102 1111'
# Tres dígitos, seguidos de un espacio, dos dígitos
pattern = '(\d{3}) (\d{2})'
# La variable match contiene un objeto Match.
match = re.search(pattern, string) 
if match:
  print(match.group())
else:
  print("patrón no encontrado")
# Salida: 801 35

Aquí,matchmatch

The variable contains a match object.3}) (\d{2}) Our pattern (\d{3}) (\d{2}) have two subgroups (\d{

) and (\d{1(
'801'
) and (\d{2(
'35'
) and (\d{1, 2(
>>> match.group(801>>> match.groups()35('
)). You can get a part of the string of these bracketed subgroups. That's it:
>>> match.group(801>>> match.groups()35('

', ''

)

The start() function returns the index of the start of the matched substring. Similarly, end() returns the index of the end of the matched substring. match.start(), match.end() and match.span()
2
>>> match.start()
8

>>> match.end()

The span() function returns a tuple containing the start and end indices of the matched part.
>>> match.span()2, 8(

)

The re attribute of the match object returns a regular expression object. Similarly, the string attribute returns the passed string. match.re and match.string

>>> match.re
re.compile('(\\d{3}) (\d{2})'
>>> match.string
'39801 356, 2102 1111'

We have introduced all the commonly used methods defined in the re module. If you want to learn more information, please visitPython 3 re module.

Use the r prefix before RegEx

If you use the r prefix before a regular expressionrorRthe prefix, indicates a raw string. For example, '\n' is a new line, while r'\n' represents two characters: a backslash \ followed by n.

The backslash \ is used to escape various characters, including all meta characters. However, usingrThe prefix \ treats it as a normal character.

Example7Use the r prefix for raw strings

import re
string = '\n and \r are escape sequences.'
result = re.findall(r'[\n\r]', string) 
print(result)
# Output: ['\n', '\r']