2012-10-20 11 views
48

標準文字でない文字や、(a-zまたは0-9)などの文字をアスタリスクで置き換える文字列があります。たとえば、 "h^&ell"、| ow] {+ orld "は" h * ell * o * w * orld "に置き換えられます。 "^ &"のような複数の文字が1つのアスタリスクに置き換えられることに注意してください。これをどうやってやりますか?文字列内の非英数字以外の文字をすべて置換します。

+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

ユニコードをたくさん扱う場合は、非ASCIIユニコードシンボルをすべて保持する必要があります: 're.sub(" [\ x00- \ x2F \ x3A- \ x40 \ x5B- \ 012 ")。 – zhazha

+0

文字列にスペースを入れたい場合は、角かっこ内にスペースを入れてください:s = re ( '[0-9a-zA-Z] +'、 '*'、s) – stackPusher

23

ニシキヘビの方法。

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

これはしかし、複数の連続した不一致の文字をグループ化を扱っていない、すなわち、正規表現ソリューションのよう

"h^&i => "h**iない"h*i"

6

試してみてください。

s = filter(str.isalnum, s) 

編集: はOPが '*' で非文字を置き換えるために望んでいることに気づきました。私の答えは合わない

5

\Wにはすべての非英数字[a-zA-Z0-9]が含まれています。マニュアルを参照してください、https://docs.python.org/2/library/re.html

Import re 
replaced_string = re.sub('\W+', '*', 'h^&ell`.,|o w]{+orld') 
output: 'h*ell*o*w*orld' 
関連する問題