【发布时间】:2015-09-24 15:47:45
【问题描述】:
假设:
self.base_version = 1000
self.target_version = 2000
我有一个文件如下:
some text...
<tsr_args> \"upgrade_test test_mode=upgrade base_sw=1000 target_sw=2000 system_profile=eth\"</tsr_args>
some text...
<tsr_args> \"upgrade_test test_mode=rollback base_sw=2000 target_sw=1000 system_profile=eth manufacture_type=no-manufacture\"</tsr_args>
some text...
<tsr_args> \"upgrade_test test_mode=downgrade base_sw=2000 target_sw=1000 system_profile=eth no_boot_next_enable_flag=True\"</tsr_args>
我需要按照上面指定的方式放置基本和目标版本值(请注意,在第 2 和第 3 个条目中,基本和目标是相反的)。
我尝试如下操作,但它不起作用:
base_regex = re.compile('.*test_mode.*base_sw=(.*)')
target_regex = re.compile('.*test_mode.*target_sw=(.*)')
o = open(file,'a')
for line in open(file):
if 'test_mode' in line:
if 'upgrade' in line:
new_line = (re.sub(base_regex, self.base_version, line))
new_line = (re.sub(target_regex, self.target_version, line))
o.write(new_line)
elif 'rollback' in line or 'downgrade' in line):
new_line = (re.sub(base_regex, self.target_version, line))
new_line = (re.sub(target_regex, self.base_version, line))
o.write(new_line)
o.close()
假设上述代码运行正常,没有任何语法错误。
文件根本没有被修改。
修改了整行,而不仅仅是捕获的组。如何使 re.sub 仅替换捕获的组?
【问题讨论】:
-
我尝试运行你的代码并得到
SyntaxError: invalid syntax。请提供minimal reproducible example。 -
我不能分享整个代码。假设上述运行没有任何语法错误。 o.write() 是覆盖当前行还是添加新行?
-
而不是 (.*),如果它始终是数字,则使用 (\d*) 或非空格使用 (\S*)。 (.*) 表示除换行符以外的任何字符。
-
如何使 re.sub 仅替换捕获的组?
-
感谢“\S*”。我相应地修改了代码。
标签: python regex python-2.7