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