繁体   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