我正在尝试从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个字符(假设没有空格)
任何提示?
答案 0 :(得分:211)
删除任何和所有空格:
foo = ''.join(foo.split())
删除最后三个字符:
foo = foo[:-3]
转换为大写字母:
foo = foo.upper()
所有代码都在一行中:
foo = ''.join(foo.split())[:-3].upper()
答案 1 :(得分:89)
它无法正常工作,因为条带是基于字符的。你需要这样做:
foo = foo.replace(' ', '')[:-3].upper()
答案 2 :(得分:14)
>>> foo = "Bs12 3ab"
>>> foo[:-3]
'Bs12 '
>>> foo[:-3].strip()
'Bs12'
>>> foo[:-3].strip().replace(" ","")
'Bs12'
>>> foo[:-3].strip().replace(" ","").upper()
'BS12'
答案 3 :(得分:8)
你可能会略微误解rstrip,它不会删除字符串,而是删除你指定的字符串中的任何字符。
像这样:
>>> text = "xxxxcbaabc"
>>> text.rstrip("abc")
'xxxx'
相反,只需使用
即可text = text[:-3]
(用空格替换空格后)
答案 4 :(得分:2)
>>> foo = 'BS1 1AB'
>>> foo.replace(" ", "").rstrip()[:-3].upper()
'BS1'
答案 5 :(得分:2)
我尽量避免使用正则表达式,但这似乎有效:
string = re.sub("\s","",(string.lower()))[:-3]
答案 6 :(得分:1)
这有什么问题?
foo.replace(" ", "")[:-3].upper()
答案 7 :(得分:1)
split
slice
concentrate
这对初学者来说是一种很好的锻炼方法,很容易实现。
另一个高级方法是这样的功能:
def trim(s):
return trim(s[slice])
对于这个问题,您只想删除最后一个字符,因此可以这样写:
def trim(s):
return s[ : -3]
我认为您已经在乎这三个字符是什么,所以您输了。您只想删除最后三个,但它们是谁!
如果要删除某些特定字符,则可以添加一些判断:
def trim(s):
if [conditions]: ### for some cases, I recommend using isinstance().
return trim(s[slice])
答案 8 :(得分:0)
您是不是以错误的顺序执行操作?您的要求似乎是foo[:-3].replace(" ", "").upper()
答案 9 :(得分:0)
这取决于你对空格的定义。我通常会将空格称为空格,制表符,换行符和回车符。如果这是你的定义,你想使用带有\ 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")