Сопоставление частей номера версии с регулярными выражениями

StackOverflow https://stackoverflow.com/questions/400522

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

2.13

В этом случае группы «Сборка» и «Редакция» должны возвращать нулевые значения.Не стесняйтесь предлагать лучший метод, если я все делаю неправильно.

Это было полезно?

Решение

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

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

Другие советы

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

Протестировано в 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
  • 3к.4.2.1
  • 3.4.
  • 4.3.21а

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

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

int major = fvi.FileMajorPart;
int minor = fvi.FileMinorPart;
int build = fvi.FileBuildPart;

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

(?<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);

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top