2009-11-25 13 views
78

私はPythonで文字列の最後の3文字を削除しようとしていますが、これらの文字が何であるのかわからないので、rstripを削除する必要がありますホワイトスペースとPython文字列の最後の3文字を削除します

に大文字に例を変換するには、次のようになります。

foo = "Bs12 3ab" 
foo.replace(" ", "").rstrip(foo[-3:]).upper() 

これは動作し、私が欲しいものであるBS12を与え、最後の第四&第三の文字が、私は両方の緩い同じですがあれば例の場合foo = "BS11 1AA"私はただ受け取る'BS'

例は次のようになります。

BS1 1AB 
bs11ab 
BS111ab 

文字列が6つのまたは7文字可能性があり、私は(何のホワイトスペースがないと仮定すると)最後の3をドロップする必要が

任意のヒント?

+7

noctisの答えは最高です。ただ言って。 – Cinder

+1

受け入れられた答えを見ないで、下に行くとnoticの答えが表示されます –

答えて

131

text = text[:-3] 

を使用します:

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

をこのよう

削除する最後の3つの文字:

大文字に変換
foo = foo[:-3] 

foo = foo.upper() 

1行でそのコードのすべて:

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

ユニコード文字列で使用されたときに空白文字*を削除するので、 '' '.join(foo.split()) 'は' foo.replace(' '、' ') 'よりも優れています。 '' '文字に加えて(特に、改行されていない空白も削除されます)。これはおそらく 'replace()'がおそらくはるかに速いので、入力文字列がASCIIでエンコードされていることがわかっていれば使用できます。スペース文字は1つだけです(ここではPython 2の用語を使用しています)。 – EOL

85

ストリップは文字ベースなので、期待通りに機能しません。代わりにこれを行う必要があります:

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

これは、要求されたOPとしてWHITESPACEを削除しません。スペース文字のみを削除します。 –

1

どうしたのですか?

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

あなたは少しrstripを誤解しているかもしれないが、それは文字列ではなく、指定した文字列内の任意の文字ではないストリップ。

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

だからではなく、単に任意およびすべての空白の削除(何も空白を交換した後)

0

が間違った順序で操作を実行しますではありませんか?あなたの要件は、私は正規表現を回避しようとfoo[:-3].replace(" ", "").upper()

+0

**は次の点を指します>>> ** –

1

のようですが、これは動作するように表示されます。

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

+0

string.lower()はstring.upper()である必要があります。私の間違い。 – krs1

0

はそれいくつかの空白のあなたの定義に依存するもの。私は一般に空白をスペース、タブ、改行、改行と呼びます。これはあなたの定義である場合は、\で正規表現を使用したいすべての空白キャラを交換するよ:

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

ストリップがすでにすべての空白を削除している場合、置換が必要ですか? – Lidia

+2

@Lidiaはい、stripは、文字列の先頭と末尾の空白だけを削除します。 –

+0

foo [3:] foo [: - 3]のようにチェーン化することはできません。 – crafter

関連する問題