用数字替换字符串中的字符

时间:2015-12-23 05:29:31

标签: python

我试图从python中删除字符串中的所有字符和特殊符号,除了数字(数字0-9)。这就是我在做什么 -

s='das dad 67 8 - 11 2928  313'
s1=''
for i in range(0,len(s)):
    if not(ord(s[i])>=48 and ord(s[i])<=57):
        s1=s1+' '
    else:
        s1=s1+s[i]  
#s1=s1.split()      
print(s1)   

所以,基本上我正在检查每个字符的ascii代码,如果它们不在数字'ascii值的范围内,我用空格更新它们。这很好,但我很好奇,如果有其他更有效的方法,我可以在python中做到这一点。

修改我想用空格替换非数字字符

3 个答案:

答案 0 :(得分:9)

import re
s1=re.sub(r"[^0-9 ]"," ",s)

您可以在此处使用re

要防止.浮动号码,请使用

(?!(?<=\d)\.(?=\d))[^0-9 ]

答案 1 :(得分:2)

您可以简单地使用列表解析来代替使用正则表达式:

>>> s='das dad 67 8 - 11 2928  313'
>>> ''.join([c if c.isdigit() else ' ' for c in s])
'        67 8   11 2928  313'

答案 2 :(得分:1)

python re,正则表达式模块有很多有用的方法来匹配字符串中的模式。使用re.sub方法替换字符串

中的正则表达式模式
  

re.sub(pattern,repl,string)

     

“返回通过替换最左边的\ n获得的字符串   \ n
中字符串中模式的非重叠出现   替换代表repl可以是字符串也可以是可调用的; \ n如果   一个字符串,其中的反斜杠转义被处理。如果是\ n a   可调用,它传递匹配对象,必须返回\ n a   要使用的替换字符串。“

>>> string = "das dad 67 8 - 11 2928  313"
>>> re.sub('[^0-9]',' ', string)
'        67 8   11 2928  313'

re.sub arguments

  1. [^0-9] - 匹配0-9位以外的所有字符
  2. ' ' - 替换为空格
  3. string - 原始字符串