Python Elimina los últimos 3 caracteres de una cadena

Estoy tratando de eliminar los últimos 3 caracteres de una cadena en python, no sé qué son estos caracteres, por lo que no puedo usar rstrip , también necesito eliminar cualquier espacio en blanco y convertirlos en 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 4º y 3º caracteres son los mismos, pierdo ambos, por ejemplo, si foo = "BS11 1AA" , solo obtengo 'BS'

ejemplos de foo podrían 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)

¿Algun consejo?

Eliminar cualquier y todos los espacios en blanco:

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

Eliminando los últimos tres caracteres:

 foo = foo[:-3] 

Convertir a mayúsculas:

 foo = foo.upper() 

Todo ese código en una línea:

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

No funciona como esperas porque la tira está basada en caracteres. Necesitas hacer esto en su lugar:

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

Es posible que haya malinterpretado rstrip ligeramente, no elimina una cadena sino cualquier carácter en la cadena que especifique.

Me gusta esto:

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

Así que en vez de eso, solo usa

 text = text[:-3] 

(Después de reemplazar los espacios en blanco con nada)

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

Intento evitar las expresiones regulares, pero esto parece funcionar:

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

¿Qué pasa con esto?

 foo.replace(" ", "")[:-3].upper() 
  1. split
  2. slice
  3. concentrate

Este es un buen entrenamiento 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 quieres eliminar los últimos caracteres, para que puedas escribir así:

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

Creo que te preocupas por lo que son esos tres personajes, por lo que perdiste. ¡Sólo quieres eliminar los últimos tres, sin embargo quiénes son!

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

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

¿No estás realizando las operaciones en el orden equivocado? Tu requisito parece ser foo[:-3].replace(" ", "").upper()

Es algo de lo que depende de su definición de espacio en blanco. Generalmente llamaría espacios en blanco para que sean espacios, tabulaciones, saltos de línea y retornos de carro. Si esta es su definición, desea usar una expresión regular con \ s para reemplazar todos los caracteres del espacio en blanco:

 import re def myCleaner(foo): print 'dirty: ', foo foo = re.sub(r'\s', '', foo) foo = foo[:-3] foo = foo.upper() print 'clean:', foo print myCleaner("BS1 1AB") myCleaner("bs11ab") myCleaner("BS111ab")