2009-11-25 101 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

相關問題