Разбор версии информационной сборки с использованием регулярного выражения - PullRequest
1 голос
/ 20 февраля 2020

Я пытаюсь разобрать строки информационной версии с помощью регулярного выражения.

Строка версии отличается по своему внешнему виду

// CI Build
2020.2.18-preview.2-b5d95e5992d99f6a6eef8faf71c47df694c763bd

// CI Release Build
2020.2.18-b5d95e5992d99f6a6eef8faf71c47df694c763bd

// Local Build
2020.2.18-preview.0

// Other...
2020.2.18

Во всех случаях я хотел бы получить следующие части

version = 2020.2.18
suffix = preview.0, preview.2 or empty
hash = b5d95e5992d99f6a6eef8faf71c47df694c763bd or empty

Единственная часть, которая должна существовать, это часть версии.

Мое текущее выражение

(?<Version>(?>\d+\.?){3,})(?:-(?<Suffix>.*?))(?:-(?<Hash>[0-9a-f]{5,40}))

Любой намек на то, как я могу сделать суффикс и га sh необязательно?

Я попытался добавить простой ноль или единицу к любому из них, но это не сработало.

1 Ответ

1 голос
/ 20 февраля 2020

Вы можете использовать

^(?<Version>(?>\d+\.?){3,})(?:-(?<Suffix>.*?))??(?:-(?<Hash>[0-9a-f]{5,40}))?$

Основные пункты:

  • ^ соответствует началу строки, а $ соответствует концу строки
  • (?:-(?<Suffix>.*?))?? - необязательный ленивый паттен, который соответствует 0 или 1 разу, он пробуется, только если следующие подшаблоны не совпадают
  • (?:-(?<Hash>[0-9a-f]{5,40}))? - необязательный жадный паттен, пробуется 1 или 0 раз.

См. Демонстрационную версию regex .

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