119

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

4

4 に答える 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

pythonicの方法。

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 に答える