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

tch*_*wik 85 python

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

nne*_*neo 155

正规救援!

import re

s = re.sub('[^0-9a-zA-Z]+', '*', s)
Run Code Online (Sandbox Code Playgroud)

例:

>>> re.sub('[^0-9a-zA-Z]+', '*', 'h^&ell`.,|o w]{+orld')
'h*ell*o*w*orld'
Run Code Online (Sandbox Code Playgroud)

  • 如果你经常处理unicode,你可能还需要保留所有非ASCII unicode符号:`re.sub("[\ x00-\x2F\x3A-\x40\x5B-\x60\x7B-\x7F] +" ,"",":%#unicodeΣΘΙП@./ \n")` (6认同)
  • 如果进行多次替换,如果您预编译正则表达式,这将执行得稍微快一些,例如,`import re; regex = re.compile('[^0-9a-zA-Z]+'); regex.sub('*', 'h^&ell.,|ow]{+orld')` (3认同)

小智 33

pythonic的方式.

print "".join([ c if c.isalnum() else "*" for c in s ])
Run Code Online (Sandbox Code Playgroud)

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

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


psu*_*sun 10

使用\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'
Run Code Online (Sandbox Code Playgroud)

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

  • 请注意,*`\W` 仅在 Python 2.x 中相当于 `[^a-zA-Z0-9_]`*。在 Python 3.x 中,仅当使用“re.ASCII”/“re.A”标志时,“\W+”相当于“[^a-zA-Z0-9_]”。 (2认同)

Don*_*Don 9

尝试:

s = filter(str.isalnum, s)
Run Code Online (Sandbox Code Playgroud)

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