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

时间:2010-06-29 14:30:13

标签: python regex

我正在尝试使用正则表达式增加版本号,但我似乎无法完全掌握正则表达式。我正在尝试阅读和更改字符串中的符号。我到目前为止的代码是:

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")]

所以基本上我想将内部版本号增加一个。

任何人都可以帮我修复我的regualr表达。我似乎无法掌握必须绕过符号的正则表达式。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

如果您将版本指定为“1.0.0。*”,则AFAIK会自动更新每个构建版本,至少在您使用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)

答案 1 :(得分:0)

正则表达式祝你好运。

如果我必须这样做,我会通过删除点将字符串转换为int,添加一个并转换回字符串。

好吧,我首先也使用了整数版本号。

相关问题