用Python修改*.RC文件(涉及正则表达式)
我需要做的是解析我项目中的资源文件,并更改它们的版本号。我有一个可以工作的JS脚本,但我想用Python来实现。
所以,问题出在使用re.sub这个函数上:
version = "2,3,4,5"
modified_str = re.sub(r"(/FILEVERSION )\d+,\d+,\d+,\d+(\s)/g", version, str_text)
我明白因为使用了捕获组,我的代码是不正确的。我尝试做了一些类似的事情:
modified_str = re.sub(r"(/FILEVERSION )(\d+,\d+,\d+,\d+)(\s)/g", r"2,3,4,5\2", str_text)
但还是没有效果。请帮帮我!
2 个回答
4
我想简单总结一下(可能对某些人有帮助):
我需要修改*.rc文件中的4行代码,比如:
FILEVERSION 6,0,20,163
PRODUCTVERSION 6,0,20,163
...
VALUE "FileVersion", "6, 0, 20, 163"
VALUE "ProductVersion", "6, 0, 20, 163"
前两行我用了Frederic Hamidi提供的正则表达式(非常感谢)。最后两行我写了另一个:
regex_2 = re.compile(r"\b(VALUE\s*\"FileVersion\",\s*\"|VALUE\s*\"ProductVersion\",\s*\").*?(\")", re.MULTILINE)
还有:
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)
谢谢大家。
4
在Python中,写多行的正则表达式不是这么做的。你需要用一个叫做 MULTILINE 的标志来编译正则表达式:
regex = re.compile(r"\bFILEVERSION \d+,\d+,\d+,\d+\b", re.MULTILINE)
另外,因为你在使用 re.sub(),如果你在替换字符串中没有再次指定 FILEVERSION
,那么这个部分会消失:
version = "FILEVERSION 2,3,4,5"
modified_str = re.sub(regex, version, str_text)
regex = re.compile(r"\b(FILEVERSION|FileVersion|PRODUCTVERSION|ProductVersion) \d+,\d+,\d+,\d+\b", re.MULTILINE)
然后你可以通过反向引用 \1
将捕获到的内容放入替换字符串中:
version = r"\1 2,3,4,5"
modified_str = re.sub(regex, version, str_text)