English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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ón | cadena | ¿Coincide? |
---|---|---|
^a...s$ | abs | No hay coincidencias |
alias | Coincide | |
abyss | Coincide | |
Alias | No hay coincidencias | |
Un ábaco | No 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.
Para especificar una expresión regular, se utilizan caracteres metálicos. En el ejemplo anterior, ^ y $ son caracteres metálicos.
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ón | cadena | ¿Coincide? |
---|---|---|
[abc] | a | 1coincidencias |
ac | 2coincidencias | |
Hey Jude | No hay coincidencias | |
abc de ca | 5coincidencias |
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ón | cadena | ¿Coincide? |
---|---|---|
.. | a | No hay coincidencias |
ac | 1coincidencias | |
acd | 1coincidencias | |
acde | 2un elemento coincidente (contiene)4caracteres) |
^- El símbolo de inserción
El símbolo de inserción ^ se utiliza para verificar si la cadena
expresión | cadena | ¿Coincide? |
---|---|---|
^a | a | 1coincidencias |
abc | 1coincidencias | |
bac | No hay coincidencias | |
^ab | abc | 1coincidencias |
acb | sin 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ón | cadena | ¿Coincide? |
---|---|---|
a$ | a | 1coincidencias |
formula | 1coincidencias | |
cab | No hay coincidencias |
*- El símbolo de asterisco
El símbolo de asterisco * coincide con*Coincidecero o más vecesdel patrón restante.
expresión | cadena | ¿Coincide? |
---|---|---|
ma*n | mn | 1coincidencias |
man | 1coincidencias | |
maaan | 1coincidencias | |
main | + | |
woman | 1coincidencias |
+- El símbolo de suma
El símbolo de suma + coincide con+Coincideuno o másdel patrón restante.
expresión | cadena | ¿Coincide? |
---|---|---|
ma+n | mn | sin coincidencia (sin carácter a) |
man | 1coincidencias | |
maaan | 1coincidencias | |
main | sin coincidencia (a seguido de n) | |
woman | 1coincidencias |
?- El símbolo de interrogación
El símbolo de interrogación ? coincide conaparece cero o una vezdel patrón restante.
expresión | cadena | ¿Coincide? |
---|---|---|
ma?n | mn | 1coincidencias |
man | 1coincidencias | |
maaan | sin coincidencia (más de un carácter a) | |
main | sin coincidencia (a seguido de n) | |
woman | 1coincidencias |
{}- 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ón | cadena | ¿Coincide? |
---|---|---|
a{2,3} | abc dat | No hay coincidencias |
abc daat | 1un coincidencia (en) daat | |
aabc daaat | 2un elemento coincidente (ubicado)aabc y) daaat | |
aabc daaaat | 2un 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ón | cadena | ¿Coincide? |
---|---|---|
[0-9]{2,4} | ab123csde | 1un coincidencia (coincidencia en) ab123csde |
12 and 345673 | 2coincidencias (ubicadas)12 and 345673 | |
1 and 2 | No hay coincidencias |
|- La barra vertical
La barra vertical | se utiliza para mostrar alternativamente (operador de or).
expresión | cadena | ¿Coincide? |
---|---|---|
a|b | cde | No hay coincidencias |
ade | 1un coincidencia (coincidencia en)ade) | |
acdbea | 3coincidencias (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ón | cadena | ¿Coincide? |
---|---|---|
(a|b|c)xz | ab xz | No hay coincidencias |
abxz | 1个匹配(在处匹配)abxz | |
axz cabxz | 2coincidencias (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ón | cadena | ¿Coincide? |
---|---|---|
\Athe | el sol | Coincide |
En el sol | No hay coincidencias |
\b -Coincide si el carácter especificado está al principio o al final de la palabra.
expresión | cadena | ¿Coincide? |
---|---|---|
\bfoo | football | Coincide |
a football | Coincide | |
afootball | No hay coincidencias | |
foo\b | el foo | Coincide |
el afoo test | Coincide | |
el afootest | No hay coincidencias |
\B-con\b. Si el carácter especificadono estáal principio o al final de la palabra, entonces coincide.
expresión | cadena | ¿Coincide? |
---|---|---|
\Bfoo | football | No hay coincidencias |
a football | No hay coincidencias | |
afootball | Coincide | |
foo\B | el foo | No hay coincidencias |
el afoo test | No hay coincidencias | |
el afootest | Coincide |
\d-Coincide con cualquier carácter decimal. Equivalente a [0-9]
expresión | cadena | ¿Coincide? |
---|---|---|
\d | 12abc3 | 3coincidencias (ubicadas)12abc3 |
Python | No hay coincidencias |
\D-Coincide con cualquier carácter no decimal. Equivalente a [^0-9]
expresión | cadena | ¿Coincide? |
---|---|---|
\D | 1ab34"50 | 3coincidencias (ubicadas)1ab34"50 |
1345 | No 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ón | cadena | ¿Coincide? |
---|---|---|
\s | Python RegEx | 1coincidencias |
PythonRegEx | No 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ón | cadena | ¿Coincide? |
---|---|---|
\S | a b | 2coincidencias (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ón | cadena | ¿Coincide? |
---|---|---|
\w | 12&": ;c | 3coincidencias (ubicadas)12&": ;c |
%"> ! | No hay coincidencias |
\W-Coincide con cualquier carácter no alfanumérico. Equivalente a [^a-zA-Z0-9_]
expresión | cadena | ¿Coincide? |
---|---|---|
\W | 1a2%c | 1coincidencias (en)1a2%c |
Python | No hay coincidencias |
\Z -Coincide si el carácter especificado está al final de la cadena.
expresión | cadena | ¿Coincide? |
---|---|---|
\ZPython | Me gusta Python | 1coincidencias |
Me gusta Python | No 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.
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.
El método re.findall() devuelve una lista de cadenas que contiene todas las coincidencias.
# 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.
El método split divide la cadena coincidente y devuelve una lista de cadenas donde se produjo la división.
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.
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.
# 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() 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.
# 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(
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)
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.
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:
El método group() devuelve la parte coincidente de la cadena.
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.
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.
import re string = '\n and \r are escape sequences.' result = re.findall(r'[\n\r]', string) print(result) # Output: ['\n', '\r']