2011-01-06 6 views
0

特定の文字列を検索して置き換える方法はありますか?同様の文字列を見て、置き換えないでください。例えばPythonで特定の検索ですか?

、私は

self.a 
self.b 
self.c 
self.d 
self.e 
self.f 
self.g 

を持っており、他の人、私は

self.a 
self.__b 
self.c 
self.__d 
self.__e 
self.f 
self.g 

を望んでいたと私はそれらをプライベートにするためにいくつかの変数に__を追加したいが、ない場合は、どのように私だろうそれぞれを個別に変更すること、またはそれらのすべてを変更すること、それから私が望んでいないものを元に戻すことはできませんか?私のプログラムには多数の変数があり、それぞれの変数を非常に頻繁に使用しているので、コードを自分自身で使いたいとは思っていません。

+3

これはPythonの問題以外の問題ではありませんか?たとえば、エディタを使ってすべての "self.b"を "self .__ b"に置き換えるか、同様の方法でsedを使うことができます。 – Christian

答えて

1

スクリプトをバックアップします。新しいスクリプトを作成し、import reを作成し、元のスクリプトをre.sub()します。機能を保証するために、regex'dスクリプトで単体テストを実行します。

3

Regular expressions

Python's re moduleには、パターンに一致するものすべてを置き換えるre.subという機能があります。

あなたの好みに応じて、Perl、awk、sedなどの正規表現を使用することもできます。一致して変更したいパターンに基づいて検索と置換を行うだけです。

+1

+1 for sed。 1つのライナーはPythonスクリプトを書くよりも簡単に動作します。 – Hollister

1

正規表現はここにあなたの友人です。彼らは初心者には少し集中的です。上の例で目標を達成するには、pythonコマンドを使用します。

import re 
pattern = r'(self\.)(b|d|e)\s' 
result = re.sub(pattern, '\1__\2', source) 

これは、「self」で始まる文字列のすべてのインスタンスを取ります。それに続いてb、d、またはeを入力し、 'self .__'の後に正しい文字列を置き換えます。

1

置換を実行するための別のスクリプトを作成するだけでなく、おそらくエディタでこれを行うことができます。たとえば、Vim型を使用する場合は、次のようにしてください。

:%s/self\.\(b\|d\|e\)/self.__\1/g 
+0

あなたがVimを使わず、Unix/Linuxコマンドラインを使っているなら、 'sed '/ self \。\(b \ | d \ | e \)/ self .__ \ 1/g' your_python_module.py ' –

関連する問題