2012-10-20 236 views
48

我有一个字符串,我希望用星号替换任何不是标准字符或数字的字符,如(a-z或0-9)。例如,“h^& ell”,| o w] {+ orld“被替换为”h * ell * o * w * orld“。请注意,诸如“^ &”之类的多个字符将被替换为一个星号。我会如何去做这件事?替换字符串中的所有非字母数字字符

+1

[Python中的字符串中剥离一切,但字母数字字符(可能的重复http://stackoverflow.com/questions/1276764/stripping-everything-but-alphanumeric-chars-from -a-string-in-python) – sds

回答

99

正则表达式来拯救!

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' 
+5

如果你处理unicode很多,你可能还需要保留所有非ASCII unicode符号:'re.sub(“[\ x00- \ x2F \ x3A- \ x40 \ x5B- \ x60 \ x7B- \ x7F] +“,”“,”:%#unicodeΣΘΙП@。/ \ n“)' – zhazha

+0

如果您想在字符串中保留空格,只需在括号内添加空格:s = re .sub('[^ 0-9a-zA-Z] +','*',s) – stackPusher

23

的Python的方式。

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

这不涉及虽然分组多个连续不匹配的字符,即

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

6

尝试:

s = filter(str.isalnum, s) 

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

相关问题