Регулярно проверять необязательную группу чисел - PullRequest
3 голосов
/ 15 октября 2019

Я пытаюсь создать регулярное выражение, которое должно принимать следующие строки

proj_asdasd_000.gz.xml
proj_asdasd.gz.xml

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

Ниже приводится мое регулярное выражение, которое я пытаюсь.

^proj([a-zA-z0-9]?)+_[a-zA-z]+(_[0-9]?)+\.[a-z]+.[a-z]

Любое предложениезаставить его принять вышеупомянутые строки?

1 Ответ

2 голосов
/ 15 октября 2019

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

^proj[a-zA-Z0-9]*_[a-zA-Z]+(?:_[0-9]+)?\.[a-z]+\.[a-z]+$
^proj[a-zA-Z0-9]*_[a-zA-Z]+(?:_[0-9]+)?(?:\.[a-z]+){2}$

См. Демоверсию regex

Подробности

  • ^- начало строки
  • proj - буквенная подстрока
  • [a-zA-Z0-9]* - 0 или более буквенно-цифровых символов
  • _ - _ символ
  • [a-zA-Z]+ - 1+ букв ASCII
  • (?:_[0-9]+)? - необязательная последовательность подчеркивания, за которой следуют 1+ цифр
  • \.[a-z]+\.[a-z]+ = (?:\.[a-z]+){2} - два вхождения . и 1+ строчные буквы ASCII
  • $ - конец строки.

Примечания:

  • [A-z] соответствует большекроме букв ASCII
  • ([a-zA-z0-9]?)+ соответствует необязательному символу 1 или более раз, что не имеет большого смысла. Либо сопоставьте символ 1 или более раз с + или 0 или более раз с *, нет необходимости в скобках
  • (_[0-9]?)+ соответствует 1 или более последовательностей _, за которыми следует одна необязательная цифра(таким образом, это соответствует _9___1_, например). Квантификаторы необходимо поменять местами, чтобы они соответствовали необязательной последовательности из _ и 1+ цифр.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...