我的一个配置文件中有以下代码: appPackage_name = sqlncli appPackage_version = 11.3.6538.0
左侧是键,右侧是值。
现在我希望能够用Python中给出密钥的其他东西替换值部分。
import re
Filepath = r"C:\Users\bhatsubh\Desktop\Everything\Codes\Python\OO_CONF.conf"
key = "appPackage_name"
value = "Subhayan"
searchstr = re.escape(key) + " = [\da-zA-Z]+"
replacestr = re.escape(key) + " = " + re.escape(value)
filedata = ""
with open(Filepath,'r') as File:
filedata = File.read()
File.close()
print ("Before change:",filedata)
re.sub(searchstr,replacestr,filedata)
print ("After change:",filedata)
我认为正在使用的正则表达式有问题。但我无法弄清楚是什么。有人可以帮助我吗?
答案 0 :(得分:0)
使用以下修复程序:
import re
#Filepath = r"C:\Users\bhatsubh\Desktop\Everything\Codes\Python\OO_CONF.conf"
key = "appPackage_name"
value = "Subhayan"
#searchstr = re.escape(key) + " = [\da-zA-Z]+"
#replacestr = re.escape(key) + " = " + re.escape(value)
searchstr = r"({} *= *)[\da-zA-Z.]+".format(re.escape(key))
replacestr = r"\1{}".format(value)
filedata = "appPackage_name = sqlncli"
#with open(Filepath,'r') as File:
# filedata = File.read()
#File.close()
print ("Before change:",filedata)
filedata = re.sub(searchstr,replacestr,filedata)
print ("After change:",filedata)
请参阅Python demo
有几个问题:您不应该忽略替换模式,只能转义正则表达式中的文字用户定义值。您可以使用捕获组(一对未转义的(...)
)和一个反向引用(此处为\1
,因为该组只是模式中的一个)来恢复您需要保留的匹配字符串的一部分而不是动态地构建替换字符串。由于版本值包含点,您应该在字符类.
中添加[\da-zA-Z.]
。您还需要在替换后分配新值,以便实际修改它。