2009-11-25 95 views
78

我试图从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(假设没有空格)

任何提示吗?

+7

noctis的回答是最好的。只是说。 – Cinder 2012-09-04 17:39:32

+1

不要看接受的答案,下去你会看到notics的答案 – 2015-09-10 19:05:56

回答

131

拆除(更换什么也没有空格之后)的任何和所有空白:

foo = ''.join(foo.split()) 

删除最后三个字符:

foo = foo[:-3] 

转换为大写字母:

foo = foo.upper() 

所有的代码在一个行:

foo = ''.join(foo.split())[:-3].upper() 
+6

我想指出,'''.join(foo.split())'比'foo.replace('','')'要好,因为它在任何*空格*字符中使用,除了“'”字符(特别是,非破坏空格也被删除)。也就是说'replace()'可能要快得多,所以如果输入字符串已知是用ASCII编码的,它只能有一个空格字符(我在这里使用Python 2术语)。 – EOL 2013-03-14 01:33:58

85

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

foo = foo.replace(' ', '')[:-3].upper() 
+11

这不会像OP所要求的那样删除WHITESPACE;它只删除SPACE字符。 – 2009-11-26 06:04:03

1

这有什么错呢?

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

你可能略有误解rstrip,这条不是一个字符串,但在字符串中指定的任何字符。

像这样:

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

所以取而代之,只是使用

text = text[:-3] 

0

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

+0

**点在以下问题>>> **(假设没有空格) – 2009-11-25 17:32:50

1

我会尽量避免正则表达式,但是这似乎工作:

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

+0

string.lower()应该是string.upper()。我的错。 – krs1 2009-11-25 17:34:24

0

它的一些什么取决于你的空白定义。我通常会将空格称为空格,制表符,换行符和回车符。如果这是你的定义要使用正则表达式用\ 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") 
13
>>> foo = "Bs12 3ab" 
>>> foo[:-3] 
'Bs12 ' 
>>> foo[:-3].strip() 
'Bs12' 
>>> foo[:-3].strip().replace(" ","") 
'Bs12' 
>>> foo[:-3].strip().replace(" ","").upper() 
'BS12' 
+0

如果strip已经删除所有空格,是否需要替换? – Lidia 2016-03-31 05:20:44

+2

@Lidia是的,strip只会从字符串的开始和结尾删除空格。 – 2016-09-09 20:31:58

+0

应该指出的是,你不能链接这个例如foo [3:] foo [: - 3] – crafter 2018-02-04 13:21:17

相关问题