-1

我的属性文件中有一个字符串,如下所示:

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()
4

2 回答 2

0

它应该是:

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 将使用由名为 name 的组匹配的子字符串,如 (?P...) 语法所定义。\g 使用对应的组号;因此,\g<2> 等价于 \2,但在诸如 \g<2>0 之类的替换中并没有歧义。\20 将被解释为对第 20 组的引用,而不是对第 2 组的引用,后跟文字字符“0”。反向引用 \g<0> 替换 RE 匹配的整个子字符串。

在您的情况下(,DB_NAME=),是您引用的第一个捕获组\g<1>

于 2020-03-08T07:16:28.550 回答
-1

你可以使用使用 string.replace()

s.replace('DB_NAME', 'cdms', 1).replace('DB_NAME', 'abc', 1)
于 2020-03-08T05:37:01.177 回答