2010-06-29 4 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

0

Успехов с регулярным выражением.

Если бы мне пришлось сделать то же самое, я бы преобразовал строку в int, удалив точки, добавив один и вернувшись к строке.

Ну, я бы также использовал целочисленный номер версии.

+0

Это объявление .NET-версии - у вас нет большого выбора формата. –