我有'12454v','346346z'等字符串。我想刪除字符串中的所有字母。刪除字符串中的字母
重新正常工作:
import re
str='12454v'
re.sub('[^0-9]','', str)
#return '12454'
有沒有辦法做到這一點,而無需使用正則表達式?
我有'12454v','346346z'等字符串。我想刪除字符串中的所有字母。刪除字符串中的字母
重新正常工作:
import re
str='12454v'
re.sub('[^0-9]','', str)
#return '12454'
有沒有辦法做到這一點,而無需使用正則表達式?
>>> ''.join(filter(str.isdigit, '12454v'))
'12454'
在Python 2的第二個參數translate
方法允許你指定要刪除的字符
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 多,多比加入/過濾器方法更快的速度:
>>> 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
同樣在Python 3:
>>> 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()
。
@kojiro我糾正了。 –