使用正则表达式递增版本号

2 投票
2 回答
2254 浏览
提问于 2025-04-16 00:34

我正在尝试用正则表达式来增加一个版本号,但我完全搞不懂正则表达式。对于我想要读取和修改的字符串中的符号,我遇到了麻烦。我目前的代码是:

version_file = "AssemblyInfo.cs" 
read_file = open(version_file).readlines() 
write_file = open(version_file, "w") 
r = re.compile(r'(AssemblyFileVersion\s*(\s*"\s*)(\S+))\s*"\s*') 

for l in read_file: 
    m1 = r.match(l) 
    if m1: 
        VERSION_ID=map(int,m1.group(2).split(".")) 
        VERSION_ID[2]+=1 # increment version 
        l = r.sub(r'\g<1>' + '.'.join(['%s' % (v) for v in VERSION_ID]), l) 
    write_file.write(l) 
write_file.close()

我想要读取和修改的字符串是:

[assembly: AssemblyFileVersion("1.0.0.0")]

我希望写入文件的内容是:

[assembly: AssemblyFileVersion("1.0.0.1")]

简单来说,我想把构建号增加一。

有没有人能帮我修正我的正则表达式?我似乎总是对处理包含符号的正则表达式感到困惑。

谢谢大家的帮助。

2 个回答

0

祝你在使用正则表达式时好运。

如果是我来做这个,我会先把字符串里的点去掉,把它变成整数,然后加一,再把它转回字符串。

其实,我一开始就会用整数来表示版本号。

1

如果你把版本设置为 "1.0.0.*",那么据我所知,每次构建的时候它会自动更新,至少在使用 Visual Studio.NET 的情况下是这样。

我不太确定正则表达式是否是最好的选择,但有一种方法可以这样做:

import re

# Don't bother matching everything, just the bits that matter.
pat = re.compile(r'AssemblyFileVersion.*\.(\d+)"')


# ... lines omitted which set up read_file, write_file etc.

for line in read_file:
    m = pat.search(line)
    if m:
        start, end = m.span(1)
        line = line[:start] + str(int(line[start:end]) + 1) + line[end:]
    write_file.write(line)

撰写回答