Python删除string的最后3个字符

我想从Python中的string中删除最后3个字符,我不知道这些字符是什么,所以我不能使用rstrip ,我也需要删除任何空格,并转换为大写

一个例子是:

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

这工作,并给我BS12这是我想要的,但是,如果最后的第四和第三个字符是相同的我都松散,如果foo = "BS11 1AA"我只是得到'BS'

foo例子可以是:

 BS1 1AB bs11ab BS111ab 

string可能是6或7个字符,我需要删除最后3个(假设没有空格)

有小费吗?

它不会像你期望的那样工作,因为strip是基于字符的。 你需要这样做:

 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,它不会剥夺string,而是你指定的string中的任何字符。

喜欢这个:

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

所以相反,只是使用

 text = text[:-3] 

(用空白replace空格之后)

这有什么问题?

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

我尽量避免正则expression式,但这似乎工作:

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

你不是以错误的顺序执行操作吗? 你的要求似乎是foo[:-3].replace(" ", "").upper()

它取决于你对空白的定义。 我通常会把空白称为空格,制表符,换行符和回车符。 如果这是你的定义,你想用\ s的正则expression式replace所有的空白字符:

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