2015-01-14 8 views
8

を除くすべての英数字以外の文字にに代わるいくつかの例外パイソン以外英数字以外の文字を置き換えます。私は_アンダースコアを除くすべての非英数字を削除しないre.sub(r'\W+', '',mystring) を使用しているPythonでperlの<code>s/[^w:]//g</code>で

。 例外を挿入する方法はありますか?=とのような記号を置き換えたくないです。

は、以前私がre.sub('[[email protected]#\'\" $()]」、 『』、mystring`)しかし を使用して、すべての不要な文字を置き換えるために、すなわち、他のアプローチを適用して、私がすべての文字が故にMYSTRINGに来るかもしれないものを予測することは不可能です私は少数を除くすべての英数字以外の文字を削除したい。

Googleが適切な回答をしてくれませんでした。最も近い検索はpython regex split any \W+ with some exceptionsですが、これは私にも役立ちませんでした。

答えて

7

ネゲートされた文字クラスで削除する必要がないものはすべて指定できます。

re.sub(r'[^\w'+removelist+']', '',mystring) 

テスト

>>> import re 
>>> removelist = "=." 
>>> mystring = "[email protected]#$" 
>>> re.sub(r'[^\w'+removelist+']', '',mystring) 
'asdf1234=.' 

ここremovelist変数を使用すると、削除対象から除外する必要があるすべての文字のリストを含む文字列です。 ^が、それはそれは文字クラスを否定するようアンカーとして機能しない文字クラスに移動されたときに文字クラスを否定ん何

を意味します。

つまり、^の文字クラス内では、[^abc]のように、文字クラスの意味を否定します。 [^abc]としてab又はcに一致しない場合、例えば[abc]について

ab又はcに一致します。また、として、abまたはc

+0

thanks @ nu11p01n73R以外の表現で表すこともできます。私は[[]内にリストを追加していませんでした。私は '^ w。='のようなものを与えましたが、それはコースがうまく機能していませんでした。あなたはrと^、^の意味を教えてください。通常は "start with"として使われますが、ここでは別の意味があるようです。 – user1977867

+0

@ user1977867うん、文字クラスの中で '^'が '[^ abc]'のように言うと、それは文字クラスの意味を否定する。つまり '[abc]'は 'a''b''または' c'にマッチします。 '[abc]'は 'a''b''または' c'と一致しません。それは 'a''b''や' c'以外のものです – nu11p01n73R

+0

なぜremovelist 'remove'listを呼んでいるのですか?それはあなたが保持したい文字のリストだと私には思われます。私はそれが私を混乱させたのでそれを言及しているだけです。 – ikku100

4

私は例えば、あなたはperlで記述したアプローチはまた、Pythonで使用できると考えている:

re.sub(r'[^\w=]', '',mystring) 

は、単語の文字以外のすべてを除去するであろうし、=

6
re.sub(r'[^a-zA-Z0-9=]', '',mystring) 

あなたはあなたが望むものは何でも追加することができます_のように保存してください。

関連する問題