我們如何從Python中的字符串中刪除所有非數字字符?在Python中刪除字符串中的所有非數字字符
回答
>>> import re
>>> re.sub("[^0-9]", "", "sdkjh987978asd098as0980a98sd")
'987978098098098'
可能是re.sub(r「\ D」,「」,「sdkjh987978asd098as0980a98sd」) – newacct 2009-08-08 19:07:25
不知道這是最有效的方式,但是:
>>> ''.join(c for c in "abc123def456" if c.isdigit())
'123456'
的''.join
部分是指所有的結果字符之間沒有任何字符相結合。然後剩下的就是一個列表理解,其中(正如你可能猜到的那樣),我們只取得匹配條件isdigit
的字符串部分。
那請問相反。我認爲你的意思是「不是c.isdigit()」 – 2009-08-08 17:19:51
刪除所有非數字==只保留數字。 – 2009-08-08 17:21:43
我喜歡這種方法不需要重新引入這個簡單的函數。 – triunenature 2015-05-25 03:09:22
最快的方法,如果您需要執行不僅僅是一個或兩個這樣的刪除操作更多(甚至只是一個,而是在一個很長的字符串 - !),是依靠字符串的translate
方法,即使它確實需要一些準備:
>>> import string
>>> allchars = ''.join(chr(i) for i in xrange(256))
>>> identity = string.maketrans('', '')
>>> nondigits = allchars.translate(identity, string.digits)
>>> s = 'abc123def456'
>>> s.translate(identity, nondigits)
'123456'
的translate
方法是不同的,也許一點點簡單的易於使用,對Unicode字符串比它的字節串,順便說一句:
>>> unondig = dict.fromkeys(xrange(65536))
>>> for x in string.digits: del unondig[ord(x)]
...
>>> s = u'abc123def456'
>>> s.translate(unondig)
u'123456'
您可能想要使用映射類而不是實際的字典,尤其是如果您的Unicode字符串可能包含具有非常高的ord值的字符(這會使字典過大;-)。例如:
>>> class keeponly(object):
... def __init__(self, keep):
... self.keep = set(ord(c) for c in keep)
... def __getitem__(self, key):
... if key in self.keep:
... return key
... return None
...
>>> s.translate(keeponly(string.digits))
u'123456'
>>>
(1)不要硬編碼幻數; S/65536/SYS。maxunicode /(2)該字典無條件地「過大」,因爲輸入「可能」包含'(sys.maxunicode - number_of_non_numeric_chars)'條目。 (3)考慮string.digits是否足以導致需要破解unicodedata模塊(4)爲簡單起見,考慮re.sub(r'(?u)\ D +',u'',text)速度。 – 2009-08-08 23:31:19
這應該字符串和Unicode對象工作:
# python <3.0
def only_numerics(seq):
return filter(type(seq).isdigit, seq)
# python ≥3.0
def only_numerics(seq):
seq_type= type(seq)
return seq_type().join(filter(seq_type.isdigit, seq))
,只有在Python 2.x – SilentGhost 2009-09-07 09:09:49
謝謝你的提醒,SilentGhost。 – tzot 2009-09-08 01:02:57
你有一個反斜槓,但是SO不會讓我修復它。 – 2013-05-25 23:01:12
只是另一種選擇加進來,還有string
模塊內的幾個有用的常量。雖然在其他情況下更有用,但可以在這裏使用它們。
>>> from string import digits
>>> ''.join(c for c in "abc123def456" if c in digits)
'123456'
有幾種常量模塊中,包括:
ascii_letters
(abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ)hexdigits
(abcdefABCDEF)
如果您大量使用這些常量,它可以值得將它們轉換爲frozenset
。這使O(1)查找,而不是O(n),其中n是原始字符串的常量的長度。
>>> digits = frozenset(digits)
>>> ''.join(c for c in "abc123def456" if c in digits)
'123456'
''.join(c爲c中的「abc123def456」,如果c.isdigit())在我的Python 3.4 – 2016-02-14 00:11:29
user = (input):
print ("hello")
- 1. 刪除字符串jquery中的所有非數字字符?
- 2. 從字符串中刪除所有非字母,非數字字符?
- 3. 在JavaScript中刪除字符串中的所有非數字字符
- 4. 快速刪除字符串中的所有非字母字符,python
- 5. 刪除字符串中的所有非ASCII字符
- 6. 如何從BASH中的字符串中刪除所有非數字字符?
- 7. 從lua字符串中刪除所有非字母數字字符
- 8. 刪除字符串中的所有數字字符DAX
- 9. 如何從字符串中刪除所有非整數? (Python)
- 10. 從python中的字符串中刪除非UTF-8字符
- 11. 如何從Java中的字符串中刪除所有非字母字符?
- 12. Python:從字符串中刪除字符
- 13. 從字符串中刪除非字母數字字符
- 14. 從字符串中刪除數字-Python
- 15. logstash - 刪除字段中的所有非數字字符
- 16. 從字符串中刪除所有非字字符(標點符號)
- 17. 如何從字符串中刪除所有非字母(所有語言)和非數字字符?
- 18. R刪除字符串中的非字母數字符號
- 19. 替換字符串中的所有非字母數字字符
- 20. 刪除字符串中的所有字符但字母
- 21. 刪除多語言字符串中的所有非字母字符
- 22. 如何從PHP中的字符串中刪除所有非字母數字和非空格字符?
- 23. 刪除字符串中所有子字符串的出現
- 24. 在sql中刪除所有非數字字符SELECT
- 25. Python - 查找字符串中的所有非字母數字字符
- 26. 從Bash中的字符串中刪除所有特殊字符
- 27. 從R中的字符串中刪除所有特殊字符?
- 28. Tcl刪除字符串後的所有字符而不刪除字符串
- 29. 刪除空白字符串中的所有小寫字母python
- 30. 串接在字符串數組中的所有非數字字符串
可能重複:http://stackoverflow.com/questions/947776/strip-all-non-numeric-characters-except-for-from-a-string-in-python – ChristopheD 2009-08-08 17:15:31