Python3 Expresiones Regulares
Una expresión regular es una secuencia especial de caracteres que te ayuda a comprobar fácilmente si una cadena coincide con algún patrón.
En Python, se utilizareel módulo para procesar expresiones regulares.
El módulo re proporciona un conjunto de funciones que te permiten realizar operaciones de coincidencia de patrones, búsqueda y reemplazo en cadenas.
reEl módulo le proporciona al lenguaje Python una funcionalidad completa de expresiones regulares.
Este capítulo presenta principalmente las funciones de procesamiento de expresiones regulares más utilizadas en Python. Si no conoces las expresiones regulares, puedes consultar nuestroExpresiones regulares - Tutorial。
Función re.match
re.match intenta hacer coincidir un patrón desde el inicio de la cadena. Si no se logra una coincidencia en la posición inicial, match() devuelve None.
Sintaxis de la función:
re.match(pattern, string, flags=0)
Descripción de los parámetros de la función:
| Parámetro | Descripción |
|---|---|
| pattern | La expresión regular a coincidir |
| string | La cadena a coincidir. |
| flags | Bandera, utilizada para controlar el modo de coincidencia de la expresión regular, como: si distingue entre mayúsculas y minúsculas, coincidencia multilínea, etc. Ver:Modificadores de expresiones regulares - Banderas opcionales |
Si la coincidencia es exitosare.matchel método devuelve un objeto de coincidencia, de lo contrario devuelveNone。
Podemos usargroup(num)ogroups()funciones del objeto de coincidencia para obtener la expresión coincidente.
| Métodos del objeto de coincidencia | Descripción |
|---|---|
| group(num=0) | La cadena de toda la expresión coincidente. group() puede aceptar varios números de grupo a la vez; en ese caso devolverá una tupla con los valores correspondientes a esos grupos. |
| groups() | Devuelve una tupla que contiene todas las cadenas de los subgrupos, desde 1 hasta el número de subgrupos incluidos. |
Ejemplo
El resultado de ejecutar el ejemplo anterior es:
(0, 3) None
Ejemplo
El resultado de ejecutar el ejemplo anterior es el siguiente:
matchObj.group() : Cats are smarter than dogs matchObj.group(1) : Cats matchObj.group(2) : smarter
Método re.search
re.search escanea toda la cadena y devuelve la primera coincidencia exitosa.
Sintaxis de la función:
re.search(pattern, string, flags=0)
Descripción de los parámetros de la función:
| Parámetro | Descripción |
|---|---|
| pattern | La expresión regular a coincidir |
| string | La cadena a coincidir. |
| flags | Bandera, utilizada para controlar el modo de coincidencia de la expresión regular, como: si distingue entre mayúsculas y minúsculas, coincidencia multilínea, etc. Ver:Modificadores de expresiones regulares - Banderas opcionales |
Cuando la coincidencia es exitosa, el método re.search devuelve un objeto de coincidencia; de lo contrario, devuelve None.
Podemos usar group(num) o groups() como funciones del objeto de coincidencia para obtener la expresión coincidente.
| Métodos del objeto de coincidencia | Descripción |
|---|---|
| group(num=0) | La cadena de toda la expresión coincidente. group() puede aceptar varios números de grupo a la vez; en ese caso devolverá una tupla con los valores correspondientes a esos grupos. |
| groups() | Devuelve una tupla que contiene todas las cadenas de los subgrupos, desde 1 hasta el número de subgrupos incluidos. |
Ejemplo
El resultado de ejecutar el ejemplo anterior es:
(0, 3) (11, 14)
Ejemplo
searchObj.group() : Cats are smarter than dogs searchObj.group(1) : Cats searchObj.group(2) : smarter
Diferencia entre re.match y re.search
re.matchSolo coincide con el inicio de la cadena. Si el inicio de la cadena no cumple con la expresión regular, la coincidencia falla y la función devuelve None, mientras quere.searchcoincide con toda la cadena hasta encontrar una coincidencia.
Ejemplo
No match!! search --> matchObj.group() : dogs
Búsqueda y reemplazo
El módulo re de Python proporciona re.sub para reemplazar las coincidencias en una cadena.
Sintaxis:
re.sub(pattern, repl, string, count=0, flags=0)
Parámetros:
- pattern : la cadena de patrón de la expresión regular.
- repl : la cadena de reemplazo, también puede ser una función.
- string : la cadena original que se va a buscar y reemplazar.
- count : el número máximo de reemplazos después de la coincidencia del patrón; por defecto 0 significa reemplazar todas las coincidencias.
- flags : el modo de coincidencia utilizado en la compilación, en forma numérica.
Los primeros tres son parámetros obligatorios, los últimos dos son opcionales.
Ejemplo
El resultado de la ejecución del ejemplo anterior es el siguiente:
电话号码 : 2004-959-559 电话号码 : 2004959559
El parámetro repl es una función
En el siguiente ejemplo, los números coincidentes en la cadena se multiplican por 2:
Ejemplo
El resultado de la ejecución es:
A46G8HFD1134
Función compile
La función compile se utiliza para compilar expresiones regulares y generar un objeto de expresión regular (Pattern) para que lo usen las funciones match() y search().
El formato de sintaxis es:
re.compile(pattern[, flags])
Parámetros:
- pattern : una expresión regular en forma de cadena
- flags es opcional, indica el modo de coincidencia, como ignorar mayúsculas y minúsculas, modo multilínea, etc. Los parámetros específicos son:
-
re.IGNORECASE o re.I- Hace que la coincidencia no distinga entre mayúsculas y minúsculas
- re.L indica que los conjuntos de caracteres especiales \w, \W, \b, \B, \s, \S dependen del entorno actual
- re.MULTILINE o re.M - Modo multilínea, cambia el comportamiento de ^ y $ para que coincidan con el inicio y el final de cada línea de la cadena.
- re.DOTALL o re.S - Hace que.coincida con cualquier carácter, incluidos los saltos de línea.
- re.ASCII - Hace que \w, \W, \b, \B, \d, \D, \s, \S coincidan únicamente con caracteres ASCII.
- re.VERBOSE o re.X - Ignora espacios y comentarios, lo que permite organizar expresiones regulares complejas de manera más clara.
Estas banderas se pueden usar por separado o combinarse mediante el operador OR bit a bit (|). Por ejemplo, re.IGNORECASE | re.MULTILINE indica que se habilitan al mismo tiempo ignorar mayúsculas/minúsculas y el modo multilínea.
Ejemplo
Ejemplo
Arriba, cuando la coincidencia es exitosa, se devuelve un objeto Match, donde:
group([group1, …])El método se utiliza para obtener las cadenas coincidentes de uno o más grupos. Cuando se desea obtener toda la subcadena coincidente, se puede usar directamentegroup()ogroup(0);start([group])El método se utiliza para obtener la posición inicial de la subcadena coincidente del grupo en toda la cadena (índice del primer carácter de la subcadena); el valor predeterminado del parámetro es 0;end([group])El método se utiliza para obtener la posición final de la subcadena coincidente del grupo en toda la cadena (índice del último carácter de la subcadena + 1); el valor predeterminado del parámetro es 0;span([group])El método devuelve(start(group), end(group))。
Veamos otro ejemplo:
Ejemplo
findall
Encuentra todas las subcadenas que coinciden con la expresión regular en la cadena y devuelve una lista. Si hay múltiples patrones de coincidencia, devuelve una lista de tuplas. Si no encuentra coincidencias, devuelve una lista vacía.
Nota:match y search coinciden una vez; findall coincide con todas.
El formato de sintaxis es:
re.findall(pattern, string, flags=0) o pattern.findall(string[, pos[, endpos]])
Parámetros:
- patternPatrón de coincidencia.
- stringLa cadena a comparar.
- posParámetro opcional, especifica la posición inicial de la cadena; por defecto es 0.
- endposParámetro opcional, especifica la posición final de la cadena; por defecto es la longitud de la cadena.
Buscar todos los números en la cadena:
Ejemplo
Resultado de salida:
['123', '456'] ['123', '456'] ['88', '12']
Múltiples patrones de coincidencia, devuelve una lista de tuplas:
Ejemplo
result = re.findall(r'(\w+)=(\d+)', 'set width=20 and height=10')
print(result)
[('width', '20'), ('height', '10')]
re.finditer
Similar a findall, encuentra todas las subcadenas que coinciden con la expresión regular en la cadena y las devuelve como un iterador.
re.finditer(pattern, string, flags=0)
Parámetros:
| Parámetro | Descripción |
|---|---|
| pattern | Expresión regular de coincidencia |
| string | La cadena a comparar. |
| flags | Banderas, utilizadas para controlar el modo de coincidencia de la expresión regular, como: si distingue entre mayúsculas y minúsculas, coincidencia multilínea, etc. Ver:Modificadores de expresiones regulares - Banderas opcionales |
Ejemplo
Resultado de salida:
12 32 43 3
re.split
El método split divide la cadena según las subcadenas que coinciden y devuelve una lista. Su forma de uso es la siguiente:
re.split(pattern, string[, maxsplit=0, flags=0])
Parámetros:
| Parámetro | Descripción |
|---|---|
| pattern | Expresión regular de coincidencia |
| string | La cadena a comparar. |
| maxsplit | Número de divisiones, maxsplit=1 divide una vez; por defecto es 0, sin límite de veces. |
| flags | Banderas, utilizadas para controlar el modo de coincidencia de la expresión regular, como: si distingue entre mayúsculas y minúsculas, coincidencia multilínea, etc. Ver:Modificadores de expresiones regulares - Banderas opcionales |
Ejemplo
Objeto de expresión regular
re.RegexObject
re.compile() devuelve un objeto RegexObject.
re.MatchObject
group() devuelve la cadena coincidente con la RE.
- start()Devuelve la posición inicial de la coincidencia
- end()Devuelve la posición final de la coincidencia
- span()Devuelve una tupla con las posiciones (inicio, fin) de la coincidencia
Modificadores de expresiones regulares - Banderas opcionales
Las expresiones regulares pueden incluir algunos modificadores de banderas opcionales para controlar el modo de coincidencia.
Las siguientes banderas se pueden usar por separado o combinadas mediante el OR bit a bit (|). Por ejemplo, re.IGNORECASE | re.MULTILINE indica que se habilitan simultáneamente el modo de ignorar mayúsculas y minúsculas y el modo multilínea.
| Modificador | Descripción | Ejemplo |
|---|---|---|
| re.IGNORECASE o re.I | Hace que la coincidencia no distinga entre mayúsculas y minúsculas |
import re
pattern = re.compile(r'apple', flags=re.IGNORECASE)
result = pattern.match('Apple')
print(result.group()) # 输出: 'Apple'
|
| re.MULTILINE o re.M | Coincidencia multilínea, afecta^y$, haciendo que coincidan con el inicio y el final de cada línea de la cadena. |
import re pattern = re.compile(r'^\d+', flags=re.MULTILINE) text = '123\n456\n789' result = pattern.findall(text) print(result) # 输出: ['123', '456', '789'] |
| re.DOTALL o re.S: | Hacer.Coincide con cualquier carácter, incluido el carácter de nueva línea. |
import re
pattern = re.compile(r'a.b', flags=re.DOTALL)
result = pattern.match('a\nb')
print(result.group()) # 输出: 'a\nb'
|
| re.ASCII | Hace que \w, \W, \b, \B, \d, \D, \s, \S coincidan solo con caracteres ASCII. |
import re
pattern = re.compile(r'\w+', flags=re.ASCII)
result = pattern.match('Hello123')
print(result.group()) # 输出: 'Hello123'
|
| re.VERBOSE o re.X | Ignora espacios y comentarios, permitiendo organizar expresiones regulares complejas de forma más clara. |
import re
pattern = re.compile(r'''
\d+ # 匹配数字
[a-z]+ # 匹配小写字母
''', flags=re.VERBOSE)
result = pattern.match('123abc')
print(result.group()) # 输出: '123abc'
|
Patrones de expresiones regulares
Las cadenas de patrón utilizan una sintaxis especial para representar una expresión regular.
Las letras y los números representan a sí mismos. Las letras y números en un patrón de expresión regular coinciden con las mismas cadenas.
La mayoría de las letras y números precedidos por una barra invertida adquieren significados diferentes.
Los signos de puntuación solo coinciden consigo mismos cuando están escapados; de lo contrario, representan significados especiales.
La barra invertida en sí misma necesita ser escapada con una barra invertida.
Dado que las expresiones regulares suelen contener barras invertidas, es mejor usar cadenas sin procesar para representarlas. Los elementos de patrón (comor'\t', equivalente a\\t) coinciden con el carácter especial correspondiente.
La siguiente tabla enumera los elementos especiales de la sintaxis de patrones de expresiones regulares. Si proporcionas parámetros de banderas opcionales junto con el patrón, el significado de algunos elementos del patrón cambiará.
| Patrón | Descripción |
|---|---|
| ^ | Coincide con el inicio de la cadena |
| $ | Coincide con el final de la cadena. |
| . | Coincide con cualquier carácter, excepto el carácter de nueva línea; cuando se especifica la bandera re.DOTALL, puede coincidir con cualquier carácter, incluido el de nueva línea. |
| [...] | Se utiliza para coincidir con cualquiera de los caracteres contenidos, por ejemplo, [amk] coincide con 'a', 'm' o 'k' |
| [^...] | Caracteres que no están en []: [^abc] coincide con cualquier carácter excepto a, b, c. |
| re* | Coincide con 0 o más repeticiones de la expresión. |
| re+ | Coincide con 1 o más repeticiones de la expresión. |
| re? | Coincide con 0 o 1 fragmento definido por la expresión regular anterior, de forma no codiciosa |
| re{ n} | Coincide con n repeticiones de la expresión anterior. Por ejemplo, "o{2}" no coincide con la "o" en "Bob", pero sí con las dos "o" en "food". |
| re{ n,} | Coincide con n o más repeticiones de la expresión anterior. Por ejemplo, "o{2,}" no coincide con la "o" en "Bob", pero coincide con todas las "o" en "foooood". "o{1,}" equivale a "o+". "o{0,}" equivale a "o*". |
| re{ n, m} | Coincide de n a m veces el fragmento definido por la expresión regular anterior, de forma codiciosa |
| a| b | Coincide con a o b |
| (re) | Coincide con la expresión entre paréntesis y también representa un grupo |
| (?imx) | La expresión regular incluye tres banderas opcionales: i, m o x. Solo afecta la zona entre paréntesis. |
| (?-imx) | La expresión regular desactiva las banderas opcionales i, m o x. Solo afecta la zona entre paréntesis. |
| (?: re) | Similar a (...), pero no representa un grupo |
| (?imx: re) | Usa las banderas opcionales i, m o x entre paréntesis |
| (?-imx: re) | No usa las banderas opcionales i, m o x entre paréntesis |
| (?#...) | Comentario. |
| (?= re) | Delimitador de afirmación positiva hacia adelante. Si la expresión regular contenida, representada como ..., coincide con éxito en la posición actual, tiene éxito; de lo contrario, falla. Pero una vez que la expresión contenida ha sido probada, el motor de coincidencia no avanza; el resto del patrón aún debe intentar coincidir a la derecha del delimitador. |
| (?! re) | Delimitador de negación hacia adelante. Lo opuesto al delimitador afirmativo; tiene éxito cuando la expresión contenida no puede coincidir en la posición actual de la cadena. |
| (?> re) | Patrón independiente que coincide, evitando el retroceso. |
| \w | Coincide con dígitos, letras y guiones bajos |
| \W | Coincide con cualquier carácter que no sea dígito, letra ni guion bajo |
| \s | Coincide con cualquier carácter de espacio en blanco, equivalente a [\t\n\r\f]. |
| \S | Coincide con cualquier carácter que no sea espacio en blanco |
| \d | Coincide con cualquier dígito, equivalente a [0-9]. |
| \D | Coincide con cualquier carácter que no sea dígito |
| \A | Coincide con el inicio de la cadena |
| \Z | Coincide con el final de la cadena; si hay un salto de línea, solo coincide hasta el final de la cadena antes del salto. |
| \z | Coincide con el final de la cadena |
| \G | Coincide con la posición donde finalizó la última coincidencia. |
| \b | Coincide con un límite de palabra, es decir, la posición entre una palabra y un espacio. Por ejemplo, 'er\b' puede coincidir con 'er' en "never", pero no con 'er' en "verb". |
| \B | Coincide con un no límite de palabra. 'er\B' puede coincidir con 'er' en "verb", pero no con 'er' en "never". |
| \n, \t, etc. | Coincide con un carácter de nueva línea. Coincide con un tabulador, etc. |
| \1...\9 | Coincide con el contenido del enésimo grupo. |
| \10 | Coincide con el contenido del enésimo grupo, si ha coincidido. De lo contrario, se refiere a la expresión del código de carácter octal. |
Ejemplos de expresiones regulares
Coincidencia de caracteres
| Ejemplo | Descripción |
|---|---|
| python | Coincide con "python". |
Clases de caracteres
| Ejemplo | Descripción |
|---|---|
| [Pp]ython | Coincide con "Python" o "python" |
| rub[ye] | Coincide con "ruby" o "rube" |
| [aeiou] | Coincide con cualquier letra dentro de los corchetes |
| [0-9] | Coincide con cualquier dígito. Similar a |
| [a-z] | Coincide con cualquier letra minúscula |
| [A-Z] | Coincide con cualquier letra mayúscula |
| [a-zA-Z0-9] | Coincide con cualquier letra y dígito |
| [^aeiou] | Todos los caracteres excepto las letras aeiou |
| [^0-9] | Coincide con cualquier carácter excepto dígitos |
Clases de caracteres especiales
| Ejemplo | Descripción |
|---|---|
| . | Coincide con cualquier carácter individual excepto "\n". Para coincidir con cualquier carácter, incluido '\n', use un patrón como '[.\n]'. |
| \d | Coincide con un carácter de dígito. Equivalente a [0-9]. |
| \D | Coincide con un carácter que no sea dígito. Equivalente a [^0-9]. |
| \s | Coincide con cualquier carácter de espacio en blanco, incluidos espacio, tabulador, avance de página, etc. Equivalente a [ \f\n\r\t\v]. |
| \S | Coincide con cualquier carácter que no sea espacio en blanco. Equivalente a [^ \f\n\r\t\v]. |
| \w | Coincide con cualquier carácter de palabra, incluido el guion bajo. Equivalente a '[A-Za-z0-9_]'. |
| \W | Coincide con cualquier carácter que no sea de palabra. Equivalente a '[^A-Za-z0-9_]'. |