2010-06-29 80 views
2

我正在嘗試使用正則表達式增加版本號,但我似乎無法得到正則表達式的掛起。我正在嘗試讀取和更改字符串中的符號。我到目前爲止的代碼是:使用正則表達式增加版本號

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表達。我似乎無法掌握必須避開符號的正則表達式。

感謝您的任何幫助。

回答

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) 
+0

非常感謝,這完美的作品。我真的需要去處理正則表達式。 – chrissygormley 2010-06-29 15:05:46

0

祝正則表達式。

如果我必須這樣做,我會將字符串轉換爲int,方法是刪除點,添加一個並轉換回字符串。

那麼,我也會在第一個地方使用整數版本號。

+0

這是一個.NET版本聲明 - 你沒有太多關於格式的選擇。 – 2010-06-29 14:50:26