re — expresiones regulares simples

Este módulo implementa operaciones con expresiones regulares. La sintaxis de expresiones regulares admitida es un subconjunto del módulo re de CPython (y en realidad es un subconjunto de las expresiones regulares extendidas de POSIX).

Los operadores y secuencias especiales admitidos son:

.

Coincide con cualquier carácter.

[...]

Coincide con un conjunto de caracteres. Se admiten caracteres individuales y rangos, incluidos conjuntos negados (p. ej. [^a-c]).

^

Coincide con el inicio de la cadena.

$

Coincide con el final de la cadena.

?

Coincide con cero o una repetición del subpatrón anterior.

*

Coincide con cero o más repeticiones del subpatrón anterior.

+

Coincide con una o más repeticiones del subpatrón anterior.

??

Versión no codiciosa de ?, coincide con cero o uno, dando preferencia a cero.

*?

Versión no codiciosa de *, coincide con cero o más, dando preferencia a la coincidencia más corta.

+?

Versión no codiciosa de +, coincide con uno o más, dando preferencia a la coincidencia más corta.

|

Coincide con el subpatrón del lado izquierdo o con el del lado derecho de este operador.

(...)

Agrupación. Cada grupo es de captura (la subcadena que captura se puede acceder con el método match.group()).

(?:...)

Agrupación sin captura. Cada grupo se compara usando las mismas reglas que la agrupación normal, pero no formará parte del objeto de coincidencia.

\d

Coincide con un dígito. Equivale a [0-9].

\D

Coincide con un no dígito. Equivale a [^0-9].

\s

Coincide con un espacio en blanco. Equivale a [ \t-\r].

\S

Coincide con un carácter que no sea espacio en blanco. Equivale a [^ \t-\r].

\w

Coincide con «caracteres de palabra» (solo ASCII). Equivale a [A-Za-z0-9_].

\W

Coincide con caracteres que no sean «caracteres de palabra» (solo ASCII). Equivale a [^A-Za-z0-9_].

\

Carácter de escape. Cualquier otro carácter que siga a la barra invertida, salvo los enumerados arriba, se toma literalmente. Por ejemplo, \* equivale al * literal (no se trata como el operador *). Tenga en cuenta que \r, \n, etc. no se manejan de forma especial, y equivaldrán a las letras literales r, n, etc. Por ello, no se recomienda usar cadenas de Python en bruto (r"") para expresiones regulares. Por ejemplo, r"\r\n" usada como expresión regular equivale a "rn". Para coincidir con un carácter CR seguido de LF, use "\r\n".

NO ADMITIDO:

  • repeticiones contadas ({m,n})

  • grupos con nombre ((?P<name>...))

  • aserciones más avanzadas (\b, \B)

  • escapes de caracteres especiales como \r, \n - use en su lugar el escape propio de Python

  • etc.

Ejemplo:

import re

# As re doesn't support escapes itself, use of r"" strings is not
# recommended.
regex = re.compile("[\r\n]")

regex.split("line1\rline2\nline3\r\n")

# Result:
# ['line1', 'line2', 'line3', '', '']

Funciones

re.compile(regex_str: str, flags: int = 0) 'regex'

Compila la expresión regular y devuelve un objeto regex.

re.search(regex_str: str, string: str) 'match | None'

Compila regex_str y lo busca en string. A diferencia de match, esto busca en la cadena la primera posición que coincide con la expresión regular (que aún puede ser 0 si la expresión regular está anclada).

re.sub(regex_str: str, replace: str | Callable, string: str, count: int = 0, flags: int = 0, /) str

Compila regex_str y lo busca en string, reemplazando todas las coincidencias con replace, y devolviendo la nueva cadena.

replace puede ser una cadena o una función. Si es una cadena, se pueden usar secuencias de escape de la forma \<number> y \g<number> para expandirse al grupo correspondiente (o a una cadena vacía para grupos no coincidentes). Si replace es una función, debe tomar un único argumento (la coincidencia) y debe devolver una cadena de reemplazo.

Si se especifica count y es distinto de cero, la sustitución se detendrá después de realizar esa cantidad de sustituciones. El argumento flags se ignora.

Objetos Regex

Expresión regular compilada. Las instancias de esta clase se crean usando re.compile().

class re.regex

Objeto de expresión regular compilada devuelto por re.compile().

match(string: str, pos: int = 0, endpos: int | None = None) 'match | None'

Aplica esta expresión regular compilada a string, anclada al inicio de la región de búsqueda, y devuelve un objeto match, o None si la expresión regular no coincide. Este es el equivalente con patrón compilado de match a nivel de módulo, y es mucho más eficiente cuando el mismo patrón se aplica a varias cadenas.

El parámetro opcional pos indica un índice en string donde debe comenzar la búsqueda; su valor predeterminado es 0. Esto no equivale completamente a hacer un corte de la cadena; el carácter de patrón '^' coincide en el verdadero inicio de la cadena y en las posiciones justo después de un salto de línea, pero no necesariamente en el índice donde debe comenzar la búsqueda.

El parámetro opcional endpos limita hasta dónde se busca en string; será como si la cadena tuviera endpos caracteres de longitud, de modo que solo se buscan los caracteres desde pos hasta endpos - 1. Si endpos es None (el valor predeterminado) se busca en toda la cadena.

search(string: str, pos: int = 0, endpos: int | None = None) 'match | None'

Recorre string buscando la primera ubicación donde esta expresión regular compilada produce una coincidencia, y devuelve un objeto match, o None si ninguna posición coincide. Este es el equivalente con patrón compilado de la función search() a nivel de módulo, y es mucho más eficiente cuando el mismo patrón se aplica a varias cadenas.

El parámetro opcional pos indica un índice en string donde debe comenzar la búsqueda; su valor predeterminado es 0. Esto no equivale completamente a hacer un corte de la cadena; el carácter de patrón '^' coincide en el verdadero inicio de la cadena y en las posiciones justo después de un salto de línea, pero no necesariamente en el índice donde debe comenzar la búsqueda.

El parámetro opcional endpos limita hasta dónde se busca en string; será como si la cadena tuviera endpos caracteres de longitud, de modo que solo se buscan los caracteres desde pos hasta endpos - 1. Si endpos es None (el valor predeterminado) se busca en toda la cadena.

sub(replace: str | Callable, string: str, count: int = 0, flags: int = 0, /) str

Busca esta expresión regular compilada en string, reemplazando todas las coincidencias con replace, y devuelve la nueva cadena. Este es el equivalente con patrón compilado de la función sub() a nivel de módulo, y es mucho más eficiente cuando el mismo patrón se aplica a varias cadenas.

replace puede ser una cadena o una función. Si es una cadena, se pueden usar secuencias de escape de la forma \<number> y \g<number> para expandirse al grupo correspondiente (o a una cadena vacía para grupos no coincidentes). Si replace es una función, debe tomar un único argumento (la coincidencia) y debe devolver una cadena de reemplazo.

Si se especifica count y es distinto de cero, la sustitución se detendrá después de realizar esa cantidad de sustituciones. El argumento flags se ignora.

split(string: str, max_split: int = -1, /) List[str]

Divide una string usando la expresión regular. Si se proporciona max_split, especifica el número máximo de divisiones a realizar. Devuelve una lista de cadenas (puede haber hasta max_split+1 elementos si se especifica).

Objetos Match

Un objeto de coincidencia contiene el resultado de una coincidencia exitosa.

class re.match(regex_str: str, string: str)

Compara regex_str con string, anclado al inicio de la cadena, y devuelve un objeto de coincidencia, o None si no coincide. Este es el atajo a nivel de módulo: re.match(regex_str, string) equivale a re.compile(regex_str).match(string).

El mismo objeto de coincidencia también es devuelto por search(), por los métodos con patrón compilado regex.match() / regex.search(), y se pasa a la función de reemplazo usada por sub().

group(index: int) str

Devuelve la (sub)cadena coincidente. index es 0 para la coincidencia completa, 1 y superiores para cada grupo de captura. Solo se admiten grupos numéricos.