使用python修改* .RC文件(涉及正则表达式)

时间:2010-10-23 11:23:29

标签: python regex

我需要的是创建项目的资源文件并更改其版本号。我有一个工作的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 个答案:

答案 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)

干杯。

相关问题