Eliminar los últimos 3 caracteres de una cadena

3 minutos de lectura

avatar de usuario
sam maquin

Estoy tratando de eliminar los últimos 3 caracteres de una cadena en Python, no sé cuáles son estos caracteres, así que no puedo usar rstriptambién necesito eliminar cualquier espacio en blanco y convertirlo a mayúsculas.

Un ejemplo sería:

foo = "Bs12 3ab"
foo.replace(" ", "").rstrip(foo[-3:]).upper()

Esto funciona y me da "BS12" que es lo que quiero, sin embargo, si los últimos caracteres 4 y 3 son iguales, pierdo ambos, por ejemplo, si foo = "BS11 1AA" acabo de recibir "BS".

Ejemplos de foo podría ser:

BS1 1AB
bs11ab
BS111ab

La cadena podría tener 6 o 7 caracteres y necesito eliminar los últimos 3 (suponiendo que no haya espacios en blanco).

  • Esta pregunta es confusa. El título solicita eliminar los últimos 3 caracteres de una cadena, pero el primer ejemplo elimina 4 caracteres y parece haber más requisitos que solo eliminar una cantidad determinada de caracteres (como eliminar también los espacios en blanco).

    – mkrieger1

    14 de julio a las 9:54

Eliminando todos y cada uno de los espacios en blanco:

foo = ''.join(foo.split())

Eliminando los últimos tres caracteres:

foo = foo[:-3]

Convirtiendo a mayúsculas:

foo = foo.upper()

Todo ese código en una línea:

foo = ''.join(foo.split())[:-3].upper()

  • Me gustaría señalar que ''.join(foo.split()) es mejor que foo.replace(' ', '')cuando se usa en cadenas Unicode porque elimina cualquier espacios en blanco carácter, además de la ' ' (en particular, también se eliminan los espacios que no se separan). Eso dijo replace() es probablemente mucho más rápido, por lo que se puede usar si, por ejemplo, se sabe que las cadenas de entrada están codificadas en ASCII, que solo tiene un carácter de espacio (aquí estoy usando la terminología de Python 2).

    – Eric O Lebigot

    14 de marzo de 2013 a las 1:33


No funciona como esperas porque la tira se basa en los personajes. Necesitas hacer esto en su lugar:

foo = foo.replace(' ', '')[:-3].upper()

  • Eso no elimina WHITESPACE como solicitó el OP; elimina solo los caracteres de ESPACIO.

    – John Maquin

    26 de noviembre de 2009 a las 6:04

>>> foo = "Bs12 3ab"
>>> foo[:-3]
'Bs12 '
>>> foo[:-3].strip()
'Bs12'
>>> foo[:-3].strip().replace(" ","")
'Bs12'
>>> foo[:-3].strip().replace(" ","").upper()
'BS12'

  • @Lidia Sí, la tira solo elimina los espacios en blanco desde el principio y el final de la cadena.

    – Eliezer Mirón

    9 sep 2016 a las 20:31

  • Cabe señalar que no puede encadenar esto, por ejemplo, foo[3:]Foo[:-3]

    – artesano

    4 de febrero de 2018 a las 13:21

Es posible que haya entendido mal rstrip un poco, no elimina una cadena sino cualquier carácter en la cadena que especifique.

Como esto:

>>> text = "xxxxcbaabc"
>>> text.rstrip("abc")
'xxxx'

Entonces, en su lugar, solo usa

text = text[:-3] 

(después de reemplazar espacios en blanco con nada)

>>> foo = 'BS1 1AB'
>>> foo.replace(" ", "").rstrip()[:-3].upper()
'BS1'

avatar de usuario
krs1

Intento evitar las expresiones regulares, pero esto parece funcionar:

string = re.sub("\s","",(string.lower()))[:-3]

  1. split
  2. slice
  3. concentrate

Este es un buen ejercicio para principiantes y es fácil de lograr.

Otro método avanzado es una función como esta:

def trim(s):
    return trim(s[slice])

Y para esta pregunta, solo desea eliminar los últimos caracteres, por lo que puede escribir así:

def trim(s):
    return s[ : -3] 

Creo que has terminado de preocuparte por lo que son esos tres personajes, así que perdiste. ¡Solo desea eliminar los últimos tres, sin embargo, quiénes son!

Si desea eliminar algunos caracteres específicos, puede agregar algunos juicios:

def trim(s):
    if [conditions]:   ### for some cases, I recommend using isinstance().
        return trim(s[slice])

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad