Python Удалить последние 3 символа строки

Я пытаюсь удалить последние 3 символа из строки в python, я не знаю, что это за символы, поэтому я не могу использовать rstrip, мне также нужно удалить любое пробел и преобразовать в верхний -случае

пример:

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

Это работает и дает мне BS12, который я хочу, однако, если последние 4-й и 3-й символы одинаковы, я теряю оба, например, если foo = "BS11 1AA" я просто получаю 'BS'

Примеры foo могут быть:

BS1 1AB
bs11ab
BS111ab

Строка может быть 6 или 7 символов, и мне нужно отбросить последние 3 (без пробелов)

Любые советы?

Ответ 1

Он не работает так, как вы ожидаете, потому что полоса имеет характер. Вам нужно сделать это вместо:

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

Ответ 2

Удаление всех пробелов:

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

Удаление трех последних символов:

foo = foo[:-3]

Преобразование в заглавные буквы:

foo = foo.upper()

Весь этот код в одной строке:

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

Ответ 3

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

Ответ 4

Возможно, вы неправильно поняли rstrip, он не содержит строки, а любой символ в указанной строке.

Вот так:

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

Поэтому вместо этого просто используйте

text = text[:-3] 

(после замены пробела ничем)

Ответ 5

Что случилось с этим?

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

Ответ 6

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

Ответ 7

Я пытаюсь избежать регулярных выражений, но это работает:

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

Ответ 8

Не выполняете ли вы операции в неправильном порядке? Требование, как вам кажется, foo[:-3].replace(" ", "").upper()

Ответ 9

Это зависит от вашего определения пробелов. Обычно я называл бы пробелы пробелами, вкладками, разрывами строк и возвратами каретки. Если это ваше определение, вы хотите использовать регулярное выражение с \s, чтобы заменить все символы пробелов:

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")