¿Cómo elimino una subcadena del final de una cadena (elimino un sufijo de la cadena)?
Tengo el siguiente código:
url = 'abcdc.com'
print(url.strip('.com'))
Esperaba:abcdc
Obtuve:abcd
Ahora lo hago
url.rsplit('.com', 1)
¿Existe una mejor manera?
Consulte ¿Cómo funcionan los métodos de cadena .strip/.rstrip/.lstrip en Python? para obtener una explicación específica de lo que está haciendo el primer intento.
strip
no significa "eliminar esta subcadena". x.strip(y)
lo trata y
como un conjunto de caracteres y elimina los caracteres de ese conjunto de ambos extremos de x
.
En Python 3.9 y versiones posteriores , puedes usar los métodos removeprefix
y removesuffix
para eliminar una subcadena completa de cualquier lado de la cadena:
url = 'abcdc.com'
url.removesuffix('.com') # Returns 'abcdc'
url.removeprefix('abcdc.') # Returns 'com'
La propuesta de mejora de Python relevante es PEP-616 .
En Python 3.8 y versiones anteriores puedes usar endswith
y cortar:
url = 'abcdc.com'
if url.endswith('.com'):
url = url[:-4]
O una expresión regular :
import re
url = 'abcdc.com'
url = re.sub('\.com$', '', url)
Si está seguro de que la cadena solo aparece al final, entonces la forma más sencilla sería utilizar 'reemplazar':
url = 'abcdc.com'
print(url.replace('.com',''))
def strip_end(text, suffix):
if suffix and text.endswith(suffix):
return text[:-len(suffix)]
return text
Ya que parece que nadie ha señalado esto todavía:
url = "www.example.com"
new_url = url[:url.rfind(".")]
Esto debería ser más eficiente que los métodos que se utilizan split()
, ya que no se crea ningún nuevo objeto de lista y esta solución funciona para cadenas con varios puntos.
A partir de Python 3.9
, puedes usar removesuffix
en su lugar:
'abcdc.com'.removesuffix('.com')
# 'abcdc'