¿Cómo elimino una subcadena del final de una cadena (elimino un sufijo de la cadena)?

Resuelto Ramya asked hace 15 años • 25 respuestas

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.

Ramya avatar Jun 24 '09 21:06 Ramya
Aceptado

stripno significa "eliminar esta subcadena". x.strip(y)lo trata ycomo 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 removeprefixy removesuffixpara 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 endswithy 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)
Steef avatar Jun 24 '2009 14:06 Steef

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',''))
Charles Collis avatar Mar 06 '2010 15:03 Charles Collis
def strip_end(text, suffix):
    if suffix and text.endswith(suffix):
        return text[:-len(suffix)]
    return text
yairchu avatar Jun 24 '2009 15:06 yairchu

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.

user3129181 avatar Aug 04 '2014 19:08 user3129181

A partir de Python 3.9, puedes usar removesuffixen su lugar:

'abcdc.com'.removesuffix('.com')
# 'abcdc'
Xavier Guihot avatar Apr 25 '2020 20:04 Xavier Guihot