簡體   English   中英

替換文件中兩個字符之間的字符串

[英]Replacing string between two characters in the file

我的proprieties文件中有一個字符串,如下所示:

line = "variables=ORACLE_BASE_HOME=/u02/test/oracle/landscape/1/db_50,DB_UNIQUE_NAME=cdms,ORACLE_BASE=//u02/test,PDB_NAME=,DB_NAME=cdms,ORACLE_HOME=/u02/test/product/19/db_21,SID=ss"

我想用不同的值替換以下字符串:

DB_NAME=cdms -> DB_NAME=abc

我有下面的代碼,但是,它似乎沒有按預期工作:

f = fileinput.FileInput(rsp_file_path)
for line in f:
    re.sub(",DB_NAME=(.*?),", "abc", line, flags=re.DOTALL)
f.close()

它應該是:

re.sub("(,DB_NAME=)(.*?),", "\g<1>abc,", line, flags=re.DOTALL)

或使用原始字符串:

re.sub(r"(,DB_NAME=)(.*?),", r"\1abc,", line, flags=re.DOTALL)

那是因為re.sub()文檔指出:

在字符串類型的 repl 參數中,除了上面描述的字符轉義和反向引用之外,\\g 將使用由 (?P...) 語法定義的名為 name 的組匹配的子字符串。 \\g 使用對應的組號; \\g<2> 因此等價於 \\2,但在諸如 \\g<2>0 之類的替換中並不含糊。 \\20 將被解釋為對組 20 的引用,而不是對組 2 后跟文字字符“0”的引用。 反向引用 \\g<0> 替換 RE 匹配的整個子字符串。

在您的情況下(,DB_NAME=)是您使用\\g<1>引用的第一個捕獲組。

你可以使用 string.replace()

s.replace('DB_NAME', 'cdms', 1).replace('DB_NAME', 'abc', 1)

暫無
暫無

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

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