我有一个字符串,我希望用星号替换任何非标准字符或数字的字符,例如(a-z或0-9)。例如,“h ^& ell`。,| o w] {+ orld”被替换为“h * ell * o * w * orld”。请注意多个字符,例如“^&”换成一个星号。我该怎么做呢?
答案 0 :(得分:138)
正规救援!
import re
s = re.sub('[^0-9a-zA-Z]+', '*', s)
示例:
>>> re.sub('[^0-9a-zA-Z]+', '*', 'h^&ell`.,|o w]{+orld')
'h*ell*o*w*orld'
答案 1 :(得分:32)
pythonic方式。
print "".join([ c if c.isalnum() else "*" for c in s ])
这不涉及对多个连续的不匹配字符进行分组,即
与正则表达式解决方案中的{p>"h^&i => "h**i
不是"h*i"
。
答案 2 :(得分:10)
使用等同于\W
的{{1}}。查看文档https://docs.python.org/2/library/re.html
[^a-zA-Z0-9_]
更新:此解决方案也会排除下划线。如果您只想排除字母和数字,那么nneonneo的解决方案更合适。
答案 3 :(得分:8)
尝试:
s = filter(str.isalnum, s)
编辑: 意识到OP希望用' *'替换非chars。我的答案不适合