替换字符串中的所有非字母数字字符

时间:2012-10-20 05:10:05

标签: python

我有一个字符串,我希望用星号替换任何非标准字符或数字的字符,例如(a-z或0-9)。例如,“h ^& ell`。,| o w] {+ orld”被替换为“h * ell * o * w * orld”。请注意多个字符,例如“^&”换成一个星号。我该怎么做呢?

4 个答案:

答案 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。我的答案不适合