我试图从Python中的字符串中删除最后3个字符,我不知道这些字符是什么,所以我不能使用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[:-3]。Replace (" ", "").upper()

其他回答

你的操作顺序错了吗?你的要求似乎是foo[:-3]。Replace (" ", "").upper()

你可能对rstrip稍有误解,它去掉的不是字符串,而是你指定的字符串中的任何字符。

是这样的:

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

所以,用

text = text[:-3] 

(将空白替换为空后)

这在一定程度上取决于你对空白的定义。我通常将空格称为空格、制表符、换行符和回车符。如果这是你的定义,你想使用一个带\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")
>>> foo = 'BS1 1AB'
>>> foo.replace(" ", "").rstrip()[:-3].upper()
'BS1'

这有什么问题?

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