Python Eliminar los últimos 3 caracteres de una cadena

146

Estoy tratando de eliminar los últimos 3 caracteres de una cadena en Python, no sé cuáles son estos caracteres, así que no puedo usarlos rstrip, también necesito eliminar cualquier espacio en blanco y convertirlos 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 4 ° y 3 ° caracteres son iguales, pierdo ambos, por ejemplo, si foo = "BS11 1AA"solo obtengo'BS'

ejemplos de foopodrían ser:

BS1 1AB
bs11ab
BS111ab

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

¿Algun consejo?

Sam Machin
fuente

Respuestas:

278

Eliminando 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()
Noctis Skytower
fuente
9
Me gustaría señalar que ''.join(foo.split())es mejor que foo.replace(' ', ''), cuando se usa en cadenas Unicode porque elimina cualquier carácter de espacio en blanco , además del ' 'carácter (en particular, también se eliminan los espacios que no se rompen). Dicho esto replace()probablemente sea 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 (estoy usando la terminología de Python 2, aquí)
Eric O Lebigot
90

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

foo = foo.replace(' ', '')[:-3].upper()
Nadia Alramli
fuente
11
Eso no elimina WHITESPACE como lo solicitó el OP; solo elimina los caracteres de ESPACIO.
John Machin el
15
>>> foo = "Bs12 3ab"
>>> foo[:-3]
'Bs12 '
>>> foo[:-3].strip()
'Bs12'
>>> foo[:-3].strip().replace(" ","")
'Bs12'
>>> foo[:-3].strip().replace(" ","").upper()
'BS12'
ghostdog74
fuente
2
@Lidia Sí, la tira solo elimina espacios en blanco desde el principio y el final de la cadena.
Eliezer Miron
Cabe señalar que no se puede encadenar esto, por ejemplo foo [3:] foo [: - 3]
crafter
9

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

Me gusta esto:

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

Entonces, en lugar de eso, solo usa

text = text[:-3] 

(después de reemplazar el espacio en blanco con nada)

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

Intento evitar expresiones regulares, pero esto parece funcionar:

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

krs1
fuente
1
string.lower () debe ser string.upper (). Mi error.
krs1
esta es la única solución que aborda bien los espacios en blanco
Erik Aronesty
1

¿Qué tiene de malo esto?

foo.replace(" ", "")[:-3].upper()
abyx
fuente
1
  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 desea eliminar los últimos caracteres, para que pueda escribir así:

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

Creo que te preocupan cuáles 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 if:

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

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

AndreaG
fuente
señala lo siguiente en la pregunta >>> (suponiendo que no haya espacios en blanco)
Noctis Skytower
0

Depende de su definición de espacio en blanco. En general, llamaría espacios en blanco como espacios, tabulaciones, saltos de línea y retornos de carro. Si esta es su definición, desea utilizar una expresión regular con \ s para reemplazar todos los caracteres de espacios 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")
Lee Joramo
fuente