Python: elimine el prefijo y el sufijo de una cadena

Aprenda a eliminar el prefijo o el sufijo de una cadena en Python con removeprefix(), removesuffix(), beginwith() y Endswith()

Introducción

Hay varias formas de eliminar espacios en blanco y otros caracteres de una cadena en Python. Los métodos más conocidos son strip(), lstrip() y rstrip(). Desde la versión 3.9 de Python, se introdujeron dos métodos muy esperados para eliminar el prefijo o el sufijo de una cadena: removeprefix() y removesuffix().

En esta guía, repasaremos rápidamente cómo usar estos métodos y por qué son útiles. También mostraremos cómo eliminar el prefijo y el sufijo para las versiones de Python anteriores a la 3.9 con la ayuda de los métodos startswith() y endswith().

If you'd like to learn more about strip(), lstrip() and rstrip(), read our Guía del método strip() de Python y sus variantes.

¿Por qué no usar los métodos strip()? {#por qué no usar los métodos de tira}

Quizás se pregunte qué tiene de malo usar los métodos lstrip() y rstrip() para recortar los prefijos y sufijos. No tienen nada de malo, sin embargo, existe la posibilidad de eliminar todo el texto con estos métodos en lugar de eliminar solo la primera o la última aparición.

Por ejemplo, intentemos eliminar el prefijo en una cadena con un patrón común:

1
2
line = "xyyyxyxyxy"
print(line.lstrip("xy"))

Este código elimina el emparejamiento de cadenas "xy" en cualquier orden, comenzando desde la izquierda. Dado que nuestra cadena de entrada solo contiene pares "xy", todo el texto se elimina:

1
2
$ python strip_test.py
$

Los métodos strip() no funcionarán si solo necesita eliminar el primero o el último carácter n. Este requisito era común en la comunidad de Python y, como respuesta, se agregaron los métodos removeprefix() y removesuffix().

Dependiendo de la versión de Python (< 3.9 o > 3.9), hay dos formas de eliminar el prefijo o el sufijo de una cadena.

Eliminar prefijo/sufijo en versiones de Python >= 3.9

Para las versiones de Python 3.9 y superiores, los métodos removeprefix() y removesuffix() vienen como métodos integrados en el espacio de nombres, utilizados para eliminar el prefijo y el sufijo de las cadenas.

Consideremos una cadena estampada como antes:

1
2
3
4
5
line = "xy"*5+" | "+"yz"*5
prefix = "xy"
line_new = line.removeprefix(prefix)
print("Before: ", line, line.count(prefix))
print("After:    ", line_new, line_new.count(prefix))

Este código elimina el prefijo "xy" de la primera cadena y muestra una cantidad de ocurrencias del prefijo para ambas líneas, al final. Vamos a ejecutar el código:

1
2
3
$ python remove_prefix.py
Before:  xyxyxyxyxy | yzyzyzyzyz 5
After:     xyxyxyxy | yzyzyzyzyz 4

De manera similar, el sufijo se puede eliminar usando el método removesuffix():

1
2
3
4
5
line = "xy"*5+" | "+"yz"*5
suffix = "yz"
line_new = line.removesuffix(suffix)
print("Before: ", line, line.count(suffix))
print("After:  ", line_new, line_new.count(suffix))

Ejecutar este código da como resultado:

1
2
3
$ python remove_suffix.py
Before:  xyxyxyxyxy | yzyzyzyzyz 5
After:   xyxyxyxyxy | yzyzyzyz 4

Eliminar prefijo/sufijo en versiones de Python < 3.9

En versiones de Python menores a la 3.9, este problema se puede resolver indirectamente usando una combinación de los métodos startswith() y endswith(), mezclados con [cortando una cuerda](/notacion-de-rebanada-de-python -en-cadena/). Esto valida si el prefijo/sufijo está presente y los segmentos correspondientes se pueden cortar de la cadena.

Así es como el prefijo se puede eliminar fácilmente de la cadena:

1
2
3
4
5
6
7
8
line = "xy"*5+" | "+"yz"*5
prefix = "xy"
 
if line.startswith(prefix):
    line_new = line[len(prefix):]
 
print("Before: ", line, line.count(prefix))
print("After:    ", line_new, line_new.count(prefix))

Después de verificar que existe el prefijo, cortamos la cadena para que contenga todo menos el prefijo y devolvemos los resultados. Esto da el siguiente resultado donde el prefijo "xy" se elimina de la cadena:

1
2
3
$ python remove_prefix_alt.py
Before:  xyxyxyxyxy | yzyzyzyzyz 5
After:     xyxyxyxy | yzyzyzyzyz 4

Para eliminar el sufijo, simplemente ajustamos el orden de los parámetros en la notación de corte para iterar desde el final de la cadena:

1
2
3
4
5
6
7
8
line = "xy"*5+" | "+"yz"*5
suffix = "yz"
 
if line.endswith(suffix):
   line_new = line[:-len(suffix)]
 
print("Before: ", line, line.count(suffix))
print("After:  ", line_new, line_new.count(suffix))

Nuevamente, primero validamos la línea usando el método endswith() para verificar si el sufijo está presente. Si esto es cierto, el sufijo se elimina de la cadena:

1
2
3
$ python remove_suffix_alt.py
Before:  xyxyxyxyxy | yzyzyzyzyz 5
After:   xyxyxyxyxy | yzyzyzyz 4

Conclusión

La eliminación de prefijos y sufijos puede ser muy útil cuando se trata de realizar el procesamiento de texto. Python v3.9+ viene con dos nuevas funciones para hacer esto posible: removeprefix() y removesuffix(). Cuando usamos versiones de Python anteriores a la 3.9, podemos usar los métodos startswith() y endswith() con división de cadenas para eliminar un prefijo y un sufijo respectivamente.

Licensed under CC BY-NC-SA 4.0