簡體   English   中英

Python正則表達式替換文件中的行

[英]Python regex to replace line in file

我有一個快速且骯臟的構建腳本,需要在一個小的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

我有2個問題:

  • 后面的引用沒有捕獲我的期望。 例如,我沒有獲得<version>abc</version> ,而是獲得了由控制字符包圍的版本值。 我嘗試將反斜杠加倍,刪除格式化的打印件和其他一些內容,但是不能完全正確。
  • 當我將行寫回到文件( print line )時,我得到了幾個額外的換行符。

我在這煩嗎?

嘗試將"\\1%s\\2" by "\\g<1>%s\\g<2>"替換"\\1%s\\2" by "\\g<1>%s\\g<2>" ,這可能是問題所在。

關於換行,印刷品可能會在現有行的基礎上添加第二行。

您可以嘗試: print line,並用逗號來抑制新行char

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM