私はこのファイルを持っています:
# blah blah blah DO NOT REPLACE blah blah
blah blah blah
blah blah REPLACE # comment comment
REPLACE blah blah
コメントが「#」で始まるので、コメント外のキーワードを置き換えたい。
Python を使用していますが、これを行うにはどうすればよいですか?
正規表現は使用しないでください。代わりに、#
文字で行を分割し、最初の部分だけを操作します。
>>> lines = '''
... # blah blah blah DO NOT REPLACE blah blah
... blah blah blah
... blah blah REPLACE # comment comment
... REPLACE blah blah
... '''
>>> [l.split('#', 1) for l in lines.split('\n')]
[[''],
[' ', ' blah blah blah DO NOT REPLACE blah blah'],
[' blah blah blah'],
[' blah blah REPLACE ', ' comment comment'],
[' REPLACE blah blah'], ['']]
コードを記述して (おそらく別のリスト内包表記を使用して) REPLACE
、最初の部分の の出現を置き換え、全体を再結合することができます。
Niklas Bに同意します。問題に正規表現は必要ありません。
次のようなものを使用できます。
>>> f = lambda text, sub, repl: \
... '\n'.join([line.split('#')[0].replace(sub, repl) + '#' + line.split('#',1)[1] \
... if '#' in line else line.replace(sub, repl)
... for line in text.split('\n')])
そして、あなたが持っている場合
>>> text = """# blah blah blah DO NOT REPLACE blah blah
... blah blah blah
... blah blah REPLACE # comment comment
... REPLACE blah blah"""
「%%%%」の「REPLACE」を置き換えたい場合は、次のように関数 f を使用できます。
>>> print f(text, 'REPLACE', '%%%%')
# blah blah blah DO NOT REPLACE blah blah
blah blah blah
blah blah %%%% # comment comment
%%%% blah blah