我需要的是创建项目的资源文件并更改其版本号。我有一个工作的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)
仍然没有效果。请帮忙!
答案 0 :(得分: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)
要匹配除FILEVERSION
以外的其他内容,请使用capture group引入alternation:
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)
答案 1 :(得分: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"
对于前两行,我使用了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)
干杯。