1

我有这个文件:

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

注释以“#”开头,我想替换不在注释中的关键字。

我正在使用python,我该怎么做?

4

2 回答 2

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第一部分中出现的 并重新加入整个事物。

于 2012-04-17T21:39:19.847 回答
0

我同意 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"""

并想将“替换”替换为“%%%%”,您可以使用函数 f,例如:

>>> print f(text, 'REPLACE', '%%%%')
# blah blah blah DO NOT REPLACE blah blah
 blah blah blah
 blah blah %%%% # comment comment
 %%%% blah blah
于 2012-04-18T00:13:12.590 回答