我有这个文件:
# 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"""
并想将“替换”替换为“%%%%”,您可以使用函数 f,例如:
>>> print f(text, 'REPLACE', '%%%%')
# blah blah blah DO NOT REPLACE blah blah
blah blah blah
blah blah %%%% # comment comment
%%%% blah blah