Python正则表达式替换文件中的行

时间:2013-03-12 12:54:43

标签: python regex python-2.7

我有一个快速而脏的构建脚本,需要在一个小的xml配置文件中更新几行。由于文件太小,我使用一个公认的效率低下的过程来更新文件只是为了简单起见:

def update_xml(property, value):
  for line in fileinput.input(os.path.join(app_dir, 'my.xml'), inplace=True):
    if property is 'version':
      line = re.sub(r'(<version>).*?(</version>)', '\1%s\2' % value, line, flags=re.IGNORECASE)
    elif property is 'brand':
      line = re.sub(r'(<property name="brand" type="string">).*?(</property>)', '\1%s\2' % value, line, flags=re.IGNORECASE)
    elif property is 'env':
      line = re.sub(r'(<property name="env" type="string">).*?(</property>)', '\1%s\2' % value, line, flags=re.IGNORECASE)

    print line

我有两个问题:

  • 后面的引用并没有捕捉到我的期望。例如,我没有获得<version>a.b.c</version>,而是获得由控制字符包围的版本值。我已经尝试加倍反斜杠,删除格式化的打印和其他一些东西,但不能完全正确。
  • 当我将该行写回文件(print line)时,我会收到几个额外的换行符。

我在这里做什么?

2 个答案:

答案 0 :(得分:0)

尝试替换"\1%s\2" by "\g<1>%s\g<2>",这可能是问题..

关于换行符,打印件可能会在现有行上添加第二行。

你可以尝试:print line,用逗号来压制新的行字符

答案 1 :(得分:0)

使用原始字符串以避免\1\2成为控制字符:r'\1%s\2'