我试图从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中做到这一点。
修改我想用空格替换非数字字符
答案 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
[^0-9]
- 匹配0-9位以外的所有字符' '
- 替换为空格string
- 原始字符串