Python中删除字符串的最后3个字符
我试图从Python中的字符串中删除的最后3个字符,我不知道这些字符,所以我不能用rstrip
,我还需要删除任何白色空间并转换为大写Python中删除字符串的最后3个字符
一个例子是:
foo = "Bs12 3ab"
foo.replace(" ", "").rstrip(foo[-3:]).upper()
这工作,给我BS12这是我想要的,但是如果最后4 & 3字符是我松都相同例如,如果foo = "BS11 1AA"
我刚刚得到'BS'
例子可以是:
BS1 1AB
bs11ab
BS111ab
的字符串可以是6或7个字符,我需要删除最后3(假设没有空格)
任何提示吗?
拆除(更换什么也没有空格之后)的任何和所有空白:
foo = ''.join(foo.split())
删除最后三个字符:
foo = foo[:-3]
转换为大写字母:
foo = foo.upper()
所有的代码在一个行:
foo = ''.join(foo.split())[:-3].upper()
我想指出,'''.join(foo.split())'比'foo.replace('','')'要好,因为它在任何*空格*字符中使用,除了“'”字符(特别是,非破坏空格也被删除)。也就是说'replace()'可能要快得多,所以如果输入字符串已知是用ASCII编码的,它只能有一个空格字符(我在这里使用Python 2术语)。 – EOL 2013-03-14 01:33:58
它不能像你期望的那样工作,因为strip是基于字符的。你需要做的这个代替:
foo = foo.replace(' ', '')[:-3].upper()
这不会像OP所要求的那样删除WHITESPACE;它只删除SPACE字符。 – 2009-11-26 06:04:03
这有什么错呢?
foo.replace(" ", "")[:-3].upper()
>>> foo = 'BS1 1AB'
>>> foo.replace(" ", "").rstrip()[:-3].upper()
'BS1'
你可能略有误解rstrip,这条不是一个字符串,但在字符串中指定的任何字符。
像这样:
>>> text = "xxxxcbaabc"
>>> text.rstrip("abc")
'xxxx'
所以取而代之,只是使用
text = text[:-3]
你不是在错误的顺序进行操作?您的要求似乎是foo[:-3].replace(" ", "").upper()
**点在以下问题>>> **(假设没有空格) – 2009-11-25 17:32:50
我会尽量避免正则表达式,但是这似乎工作:
string = re.sub("\s","",(string.lower()))[:-3]
string.lower()应该是string.upper()。我的错。 – krs1 2009-11-25 17:34:24
它的一些什么取决于你的空白定义。我通常会将空格称为空格,制表符,换行符和回车符。如果这是你的定义要使用正则表达式用\ S替换所有空白charactors:
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 = "Bs12 3ab"
>>> foo[:-3]
'Bs12 '
>>> foo[:-3].strip()
'Bs12'
>>> foo[:-3].strip().replace(" ","")
'Bs12'
>>> foo[:-3].strip().replace(" ","").upper()
'BS12'
noctis的回答是最好的。只是说。 – Cinder 2012-09-04 17:39:32
不要看接受的答案,下去你会看到notics的答案 – 2015-09-10 19:05:56