Ответ 1
Он не работает так, как вы ожидаете, потому что полоса имеет характер. Вам нужно сделать это вместо:
foo = foo.replace(' ', '')[:-3].upper()
Я пытаюсь удалить последние 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 (без пробелов)
Любые советы?
Он не работает так, как вы ожидаете, потому что полоса имеет характер. Вам нужно сделать это вместо:
foo = foo.replace(' ', '')[:-3].upper()
Удаление всех пробелов:
foo = ''.join(foo.split())
Удаление трех последних символов:
foo = foo[:-3]
Преобразование в заглавные буквы:
foo = foo.upper()
Весь этот код в одной строке:
foo = ''.join(foo.split())[:-3].upper()
>>> foo = "Bs12 3ab"
>>> foo[:-3]
'Bs12 '
>>> foo[:-3].strip()
'Bs12'
>>> foo[:-3].strip().replace(" ","")
'Bs12'
>>> foo[:-3].strip().replace(" ","").upper()
'BS12'
Возможно, вы неправильно поняли rstrip, он не содержит строки, а любой символ в указанной строке.
Вот так:
>>> text = "xxxxcbaabc"
>>> text.rstrip("abc")
'xxxx'
Поэтому вместо этого просто используйте
text = text[:-3]
(после замены пробела ничем)
Что случилось с этим?
foo.replace(" ", "")[:-3].upper()
>>> foo = 'BS1 1AB'
>>> foo.replace(" ", "").rstrip()[:-3].upper()
'BS1'
Я пытаюсь избежать регулярных выражений, но это работает:
string = re.sub("\s","",(string.lower()))[:-3]
Не выполняете ли вы операции в неправильном порядке? Требование, как вам кажется, foo[:-3].replace(" ", "").upper()
Это зависит от вашего определения пробелов. Обычно я называл бы пробелы пробелами, вкладками, разрывами строк и возвратами каретки. Если это ваше определение, вы хотите использовать регулярное выражение с \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")