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