119

我有一个字符串,我想用它用星号替换任何不是标准字符或数字的字符,例如(az 或 0-9)。例如,“h^&ell`.,|ow]{+orld”被替换为“h*ell*o*w*orld”。请注意,多个字符(例如“^&”)将替换为一个星号。我该怎么做呢?

4

4 回答 4

222

正则表达式来救援!

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'
于 2012-10-20T05:11:02.437 回答
49

蟒蛇的方式。

print "".join([ c if c.isalnum() else "*" for c in s ])

但是,这不涉及对多个连续的不匹配字符进行分组,即

"h^&i => "h**i不像"h*i"正则表达式解决方案。

于 2014-02-28T13:27:31.180 回答
17

尝试:

s = filter(str.isalnum, s)

在 Python3 中:

s = ''.join(filter(str.isalnum, s))

编辑:意识到OP想要用'*'替换非字符。我的回答不合适

于 2015-01-05T05:15:40.283 回答
12

使用\W相当于[^a-zA-Z0-9_]. 检查文档,https://docs.python.org/2/library/re.html

import re
s =  'h^&ell`.,|o w]{+orld'
replaced_string = re.sub(r'\W+', '*', s)
output: 'h*ell*o*w*orld'

更新:此解决方案也将排除下划线。如果您只想排除字母和数字,那么 nneonneo 的解决方案更合适。

于 2016-08-12T18:54:59.633 回答