用python修改*.RC文件(涉及regexp)

2024-04-23 08:22:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要的是打包项目的资源文件并更改其版本号。我有一个工作的JS脚本,但我想用python实现它。在

所以,问题在于使用re.sub公司公司名称:

version = "2,3,4,5"
modified_str = re.sub(r"(/FILEVERSION )\d+,\d+,\d+,\d+(\s)/g", version, str_text)

我知道由于使用了捕捉组,我的代码是不正确的。我试着做smth就像:

^{pr2}$

还是没有效果。救命啊!在


Tags: 文件项目代码textre脚本名称version
2条回答

只是想总结一下(可能会对某人有所帮助):

我不得不修改*.rc文件中的4行,例如:

FILEVERSION 6,0,20,163
PRODUCTVERSION 6,0,20,163
...
VALUE "FileVersion", "6, 0, 20, 163"
VALUE "ProductVersion", "6, 0, 20, 163"

对于前两行,我使用了frederichamidi给出的regexp(thx很多)。最后两个我又写了一个:

^{pr2}$

以及:

pass_1 = re.sub(regex_1, r"\1 " + v, source_text)
v = re.sub(",", ", ", v) #replacing "x,y,v,z" with "x, y, v, z"
pass_2 = re.sub(regex_2, r"\g<1>" + v + r"\2", pass_1)

干杯。在

这不是在python中生成多行正则表达式的方法。必须使用MULTILINE标志编译正则表达式:

regex = re.compile(r"\bFILEVERSION \d+,\d+,\d+,\d+\b", re.MULTILINE)

另外,由于使用的是re.sub(),因此如果不在替换字符串中再次指定它,则字符串的FILEVERSION部分将消失:

^{pr2}$

要匹配FILEVERSION之外的其他内容,请使用alternation引入capture group

regex = re.compile(r"\b(FILEVERSION|FileVersion|PRODUCTVERSION|ProductVersion) \d+,\d+,\d+,\d+\b", re.MULTILINE)

然后可以使用backreference\1将捕获的表达式注入替换字符串:

version = r"\1 2,3,4,5"
modified_str = re.sub(regex, version, str_text)

相关问题 更多 >