Соответствие частей номера версии с регулярными выражениями - PullRequest
8 голосов
/ 30 декабря 2008

Я пытаюсь сопоставить части номера версии (Major.Minor.Build.Revision) с регулярными выражениями C #. Тем не менее, я довольно новичок в написании Regex, и даже использование Expresso оказывается немного сложным. Прямо сейчас у меня есть это:

(?<Major>\d*)\.(?<Minor>\d*)\.(?<Build>\d*)\.(?<Revision>\d*)

Это работает, но требует, чтобы существовала каждая часть номера версии. То, что я хотел бы сделать, это также соответствие версий, как:

2.13

В этом случае группы Build и Revision должны возвращать нулевые значения. Не стесняйтесь предлагать лучший метод, если я все об этом ошибаюсь.

Ответы [ 6 ]

13 голосов
/ 30 декабря 2008
(?<Major>\d*)\.(?<Minor>\d*)(\.(?<Build>\d*)(\.(?<Revision>\d*))?)?

Делает третью и четвертую части необязательными.

3 голосов
/ 14 июля 2012

Я знаю, что это не регулярное выражение, но System.Version сделает всю работу за вас.

2 голосов
/ 08 ноября 2010

Протестировано в VBScript, этот шаблон:

^(\d+)(\.\d+)?(\.\d+)?(\.\d+)?$

Подтвердит все следующие данные True:

  • 23
  • 23,1
  • 23.1.1
  • 23.1.1.1

И следующие все Ложные:

  • 23.11.11.33.11
  • 23,43 2,1
  • 44.11.2 3
  • 3q.4.2.1
  • 3.4.
  • 4.3.21a
1 голос
/ 30 декабря 2008

Если вы не хотите использовать Regex, вы можете попробовать:

System.Diagnostics.FileVersionInfo fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(<string filePath>);

int major = fvi.FileMajorPart;
int minor = fvi.FileMinorPart;
int build = fvi.FileBuildPart;
0 голосов
/ 30 апреля 2012

Над ответом не работает должным образом

(?<Major>\d*)\.(?<Minor>\d*)(\.(?<Build>\d*)(\.(?<Revision>\d*))?)?

попробуйте это,

  var regularExpression = @"^(\d+\.)?(\d+\.)?(\d+\.)?(\*|\d+)$";
                var regex = Regex.IsMatch("1.0.0.0", regularExpression, RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
                Console.WriteLine(regex);
0 голосов
/ 30 декабря 2008

Попробуйте что-то вроде этого:

(?<Major>\d*)\.?(?<Minor>\d*)?\.?(?<Build>\d*)?\.?(?<Revision>\d*)?

Я просто добавил некоторые квантификаторы «ноль или один» в группы захвата, а также в точки на случай, если их там нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...