「12454v」、「346346z」などの文字列があります。文字列からすべての文字を削除したい。
Re は正常に動作します:
import re
str='12454v'
re.sub('[^0-9]','', str)
#return '12454'
正規表現を使わずにこれを行う方法はありますか?
「12454v」、「346346z」などの文字列があります。文字列からすべての文字を削除したい。
Re は正常に動作します:
import re
str='12454v'
re.sub('[^0-9]','', str)
#return '12454'
正規表現を使わずにこれを行う方法はありますか?
>>> ''.join(filter(str.isdigit, '12454v'))
'12454'
Python 2では、translate
メソッドの2番目の引数を使用して、削除する文字を指定できます
http://docs.python.org/2/library/stdtypes.html#str.translate
与えられた例は、文字を削除するNone
ための変換テーブルとして使用できることを示しています。
>>> 'read this short text'.translate(None, 'aeiou')
'rd ths shrt txt'
(文字列モジュールからすべてのASCII文字のリストを次のように取得できますstring.letters
。)
更新:Python 3にもtranslate
メソッドがありますが、少し異なる設定が必要です。
from string import ascii_letters
tr_table = str.maketrans({c:None for c in ascii_letters})
'12345v'.transate(tr_table)
ちなみに、Python 2で変換テーブルを使用する方が、join/filterメソッドよりもはるかに高速です。
>>> timeit("''.join(filter(lambda c:not c.isalpha(), '12454v'))")
2.698641061782837
>>> timeit("''.join(filter(str.isdigit, '12454v'))")
1.9351119995117188
>>> timeit("'12454v'.translate(None, string.letters)", "import string")
0.38182711601257324
同様にPython3でも。
>>> timeit("'12454v'.translate(tr_table)", "import string; tr_table=str.maketrans({c:None for c in string.ascii_letters})")
0.6507143080000333
>>> timeit("''.join(filter(lambda c:not c.isalpha(), '12454v'))")
2.436105844999929
メソッドでこれを試すことができると思います.translate
。
>>> import string
>>> str='12454v'
>>> str.translate(None, string.letters)
'12454'
.translate
メソッドhereについて非常に良い答えがあります。
これは、特定の関数を使用しておらず、やや不格好であるため、他のものよりもややエレガントではありません。
newStr = ''
myStr='12454v'
for char in myStr:
try:
newStr += str(int(char))
except ValueError:
pass
print newStr
繰り返しますが、これは最善の方法ではありませんが、私はそれを捨てています。int
が整数かどうかを確認できるように、最初に変換しました。次に、 にstr
追加できるように に変換しnewStr
ます。
別の注意str
として、組み込み関数をシャドウするため、変数名として使用しないでくださいstr()
。