![](/img/trans.png)
[英]Extracting String between two special characters and replacing it with new string in python
[英]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.