2012-04-17 6 views
1

まで、私はこのファイルを持って置き換えます正規表現は、コメント

# blah blah blah DO NOT REPLACE blah blah 
blah blah blah 
blah blah REPLACE # comment comment 
REPLACE blah blah 

コメントは「#」で始まる、私はそれがコメント内ではないキーワードを交換したいです。

私はPythonを使用していますが、どうすればいいですか?

+6

コードはどこですか? –

+1

'str ="男の子、私は文字列に '#'を使うことができてうれしいですか? –

答えて

3

正規表現を使用しないでください。その代わり、#文字で行を分割し、ちょうど最初の部分で作業:

>>> 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の発生を交換し、全体を再参加するために(おそらく別のリストの内包表記を使用して)、コードを書くことができますもの。

0

私はNiklas Bに同意しますが、問題に対して正規表現は必要ありません。

あなたはこのようないくつかを使用することができます:あなたは

>>> text = """# blah blah blah DO NOT REPLACE blah blah 
... blah blah blah 
... blah blah REPLACE # comment comment 
... REPLACE blah blah""" 

を持っていると置換 "REPLACE" にしたい場合は、関数fを使用することができます '%%%%' の、

>>> 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')]) 

、その後、 like:

>>> print f(text, 'REPLACE', '%%%%') 
# blah blah blah DO NOT REPLACE blah blah 
blah blah blah 
blah blah %%%% # comment comment 
%%%% blah blah