0
A
回答
3
如果你需要使用正則表達式,使用負字符類([^...]
):
re.sub(r'[^a-zA-Z]', '', inputtext)
一個否定的字符類匹配任何不在類命名。
演示:
>>> import re
>>> inputtext = 'The quick brown fox!'
>>> re.sub(r'[^a-zA-Z]', '', inputtext)
'Thequickbrownfox'
但使用str.translate()
是方式更快:
import string
ascii_letters = set(map(ord, string.ascii_letters))
non_letters = ''.join(chr(i) for i in range(256) if i not in ascii_letters)
inputtext.translate(None, non_letters)
使用str.translate()
是超過10倍,比一個正則表達式快:
>>> import timeit, partial, re
>>> ascii_only = partial(re.compile(r'[^a-zA-Z]').sub, '')
>>> timeit.timeit('f(t)', 'from __main__ import ascii_only as f, inputtext as t')
7.903045892715454
>>> timeit.timeit('t.translate(None, m)', 'from __main__ import inputtext as t, non_letters as m')
0.5990171432495117
使用的Jakub的方法仍然比較慢:
>>> timeit.timeit("''.join(c for c in t if c not in l)", 'from __main__ import inputtext as t; import string; l = set(string.letters)')
9.960685968399048
0
您可以使用regex:
你也可以管理沒有正則表達式(例如,如果你有正則表達式恐懼症):
import string
new_string = ''.join(c for c in old_string
if c not in set(string.letters))
儘管我會使用正則表達式,但此示例具有其他教育值:set
,comprehension和string庫。請注意0這裏不是嚴格需要的
+0
您的正則表達式會更快,請參閱我的答案。:-) –
相關問題
- 1. 外匯牌價異國情調的字符AZ,az或0-9
- 2. XQuery - 刪除所有不是{AZ,az,_,0-9}的字符(非法)
- 3. 從字符串中移除除az之外的所有字符
- 4. 的Oracle SQL - REGEXP_LIKE包含除AZ或az
- 5. 正則表達式從列表中刪除非字母詞AZ AZ(例外)
- 6. 字母(az)
- 7. java的正則表達式[AZ] {6} - [AZ] {4} - [AZ] {4}
- 8. 的Android只接受az和AZ
- 9. 在oracle中,如何將屬於[az] [AZ]的列中的字符數據轉換爲一些隨機字符x
- 10. TR [AZ] [AZ]示出了誤差在UNIX
- 11. Mysql的像字符[AZ]或零
- 12. 匹配字符串,而不是由AZ或AZ開頭,幷包含1324
- 13. 密碼至少[1-9]至少[az]至少[AZ]無特殊字符
- 14. 與AZ部分
- 15. 的preg_replace保持空間,如果開始用AZ與AZ
- 16. Ruby輸出8到16個字符之間的每個可能的字符(AZ,az,0-9)
- 17. 正則表達式:0-9 AZ AZ或任何這些* + -/=^_`{|}〜
- 18. 包含「AZ」,「az」,「0-9」,「 - 」,「()」,「&」,「/」,「\」,「,」的文本的正則表達式
- 19. ansible EC2 AZ變量
- 20. Kubernetes - Cross AZ流量
- 21. 正則表達式:當至少有x az,AZ,0-9,!@#$%^&*()_字符時如何匹配
- 22. 會話ID過長或含有非法字符,有效字符包括AZ,az,0-9和 ' - '
- 23. Warning:session_start()[function.session-start]:會話ID包含非法字符,有效字符是az,AZ,0-9和' - ',
- 24. 正則表達式:字符串(包括AZ,az,0-9,可以包括 '\', '/' 和白色sapce)
- 25. 轉換編碼的字符到正常[AZ]字符
- 26. Python - 驗證以確保輸入只包含字符AZ
- 27. 隨機數或者65- 90 [AZ]或97-122 [AZ]
- 28. JavaScript正則表達式允許AZ,az或0-9&@等
- 29. .net錯誤不支持文化名'az-az'。參數名:名
- 30. MySQL正則表達式[az] \。[az]但不是am或pm
* *是多餘的 –
@JonClements:它使替換更有效率;而不是用空字符串逐個替換每個字符,而是用空字符串替換匹配字符的*組*。 –
@JonClements:Ick。 'timeit'表明添加'*'顯着減慢了這一點。刪除。 –