2012-10-20 274 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想更換非字符用 '*'。我的回答不適合

相關問題