Skip to content
Tech AI Wire

Python 3.15 deja obsoleto en suave re.match() por re.prefixmatch

Python 3.15 marca re.match() como obsoleto en suave a favor del nuevo re.prefixmatch(). Nada se rompe, nada avisa y no hay retirada prevista.

Por Tech AI Wire Team

3 min de lectura

XLinkedIn
The Python 3.15 documentation page for the re module, showing the soft-deprecation note attached to re.match().

En cifras

Python version adding re.prefixmatch()
3.15
runtime warnings a soft deprecation emits
0

Python 3.15 añade una función llamada re.prefixmatch() y marca en su lugar el veterano re.match(), de 30 años, como obsoleto en suave. Las dos hacen exactamente lo mismo. El cambio va del nombre, porque match ha significado lo que no debía en Python desde que existe la función.

La documentación de Python 3.15 para el módulo re expone el motivo de forma directa. El nuevo nombre es «más explícitamente descriptivo», dice, y los desarrolladores deberían usarlo «para expresar mejor la intención». En la mayoría de los demás lenguajes, señala la documentación, match se refiere al comportamiento que Python siempre ha llamado search().

El problema del nombre

El re.match() de Python solo mira el principio de una cadena. Se ancla en la posición cero y ahí se detiene. re.search() recorre toda la cadena buscando el patrón en cualquier punto.

La mayoría de los demás lenguajes hacen lo contrario. Su «match» es el «search» de Python. Quien llega desde JavaScript, Ruby o Go lee re.match() y espera razonablemente que encuentre el patrón en cualquier parte. No lo hace, y el fallo que sigue es silencioso: el código simplemente devuelve None ante entradas que debería haber procesado.

re.match("world", "hello world")       # None - anclado al principio
re.prefixmatch("world", "hello world") # None - misma función, nombre más claro
re.search("world", "hello world")      # coincide

Hugo van Kemenade expuso el argumento en una entrada de blog publicada el 10 de septiembre de 2026, citando el Zen de Python: «Explícito es mejor que implícito. Quien lea el nombre prefixmatch() probablemente entenderá la semántica que se pretende.»

Tanto la función a nivel de módulo como el método de los patrones compilados reciben el nuevo nombre. re.Pattern.prefixmatch() acompaña a re.prefixmatch() en la 3.15.

Qué significa realmente «obsoleto en suave»

La obsolescencia suave es un proceso concreto definido en PEP 387, la política de compatibilidad hacia atrás de Python. Es mucho más débil que una obsolescencia normal, y la diferencia importa a quien mantiene código antiguo.

Obsolescencia suaveObsolescencia normal
Aviso en tiempo de ejecuciónNingunoDeprecationWarning
Retirada previstaNoSí, en una versión concreta
Sigue documentada y probadaSí, hasta la retirada
Recibe nuevas funcionesNoNo

PEP 387 la define como «usar una API que ya no debería emplearse para escribir código nuevo, pero que sigue siendo seguro seguir usando en código existente». También dice con claridad que la obsolescencia suave «no emite ningún aviso: solo se menciona en la documentación».

Así que re.match() sigue funcionando. No está previsto retirarlo. Su conjunto de pruebas no empezará a imprimir avisos al pasar a la 3.15, y python -W error no fallará por ello.

Cuál de las cuatro usar

El módulo re ofrece ahora cuatro formas de aplicar un patrón a una cadena. Solo se diferencian en dónde se permite que esté el patrón.

FunciónCoincideAñadida en
re.prefixmatch()Solo al principio3.15
re.match()Solo al principio, obsoleta en suave1.5
re.search()En cualquier parte de la cadena1.5
re.fullmatch()La cadena entera, de principio a fin3.4

Qué significa esto para los desarrolladores

No hay nada urgente. Este es el raro cambio de API que no pide migración, no fija plazo y no rompe código.

En código nuevo sobre 3.15 o posterior, escriba re.prefixmatch(). El nombre le dice al siguiente lector qué hace realmente la llamada, que es justo el objetivo del cambio.

Para el código existente, el ejercicio útil no es un buscar y reemplazar. Es una revisión. Cada llamada a re.match() en su base de código es un punto donde alguien pudo querer decir re.search(). Las pruebas no lo detectarían si solo pasaron entradas donde el patrón estaba al principio. Esos son fallos reales anteriores a la 3.15, y un grep rápido encontrará los candidatos antes que cualquier herramienta.

Eso sí, tenga cuidado al saltar directamente a re.prefixmatch() en una biblioteca. Llamarla obliga a su paquete a exigir Python 3.15 o posterior, y re.match() es la forma portable entre versiones hasta que su versión mínima admitida se ponga al día. Las bases de código grandes conviven años con esa distancia; los desarrolladores de EVE Online empezaron su migración a Python 3 mucho después de la separación de versiones.

Conviene fijarse en la señal más amplia. El equipo central de Python está dispuesto a gastar un nombre nuevo y una nota en la documentación solo para que una API antigua se lea bien, sin obligar a nadie a cambiar una línea. Es una limpieza barata, y cuanta más haga Python, menos retornos None silenciosos tendrá que depurar la próxima generación de desarrolladores de Python.

Fuentes

  1. Soft-deprecating re.match() - hugovk.dev
  2. re - Regular expression operations (Python 3.15) - Python documentation
  3. What's New In Python 3.15 - Python documentation
  4. PEP 387 - Backwards Compatibility Policy - Python Enhancement Proposals

Artículos relacionados