Регулярное выражение - PullRequest
       3

Регулярное выражение

0 голосов
/ 17 января 2020

Я пытаюсь создать регулярное выражение, которое начинается с ab c, затем пробел, а затем 2 di git число, которое не должно начинаться с 0 и которое должно быть меньше 33, тогда в скобках должно быть минимум 3 числа запятые и пробел между ними. После этого, если запятая, то регулярное выражение после ab c должно повториться.

Например:

  1. abc 23(340, 223, 243)
  2. abc 3(336,455,344,880,567), 32(323,344,464)

Я пытался сделать это следующим образом:

  1. /^abc(\s((?!(0))\d{1,2}[(]([1-9][0-9]*[,]){2}([1-9][0-9]*[,]*)+[)])([,]*))+/g

  2. /^abc(\s((?!(0))\d{1,2}[(]([1-9][0-9]*[,]){2}(([1-9][0-9]*)[,]*)+[)])(([,]\s((?!(0))\d{1,2}[(]([1-9][0-9]*[,]){2}(([1-9][0-9]*)[,]*)+[)]))*))+/g

Эти выражения не включают регистр менее 33 и эти выражения также допускают регистр, такой как:

  1. abc 23(323,345,455),
  2. abc 23(323,345,455), 34()

, которые не требуются.

Ответы [ 2 ]

1 голос
/ 17 января 2020

Вы можете использовать повторяющиеся группы без захвата:

^abc (?:[1-9]|[12][0-9]|3[0-3])\([1-9][0-9]*(?:, ?[1-9][0-9]*){2,}\)(?:, (?:[1-9]|[12][0-9]|3[0-3])\([1-9][0-9]*(?:, ?[1-9][0-9]*){2,}\))*$
  • ^ Начало строки
  • abc Совпадение ab c и пробел
  • (?: Группа без захвата
    • [1-9]|[12][0-9]|3[0-3] Соответствует ди git 1 - 33
  • ) Закрыть группу
  • \( Совпадение (
  • [1-9][0-9]* Совпадение с ди git 1-9 и повторение 0+ цифр 0-9
    • (?:, ?[1-9][0-9]*){2,} Совпадение с запятой, необязательный пробел и повтор 2 или больше раз, чтобы соответствовать минимум 3 числа
  • \) Match )
  • (?: Группа без захвата
    • , Match запятая и пробел
    • (?:[1-9]|[12][0-9]|3[0-3])\([1-9][0-9]*(?:, ?[1-9][0-9]*){2,}\) Повторите то же самое, что и первый шаблон
  • )* Закройте группу и повторите 0+ раз
  • $ Конец строки

Regex demo

1 голос
/ 17 января 2020

Как насчет следующего:

^abc\s(?:(?:[1-9]|[12][0-9]|3[0-3])\(\d+(?:,\s?\d+){2,}\))(?:,\s?(?:(?:[1-9]|[12][0-9]|3[0-3])\(\d+(?:,\s?\d+){2,}\)))*$

Проверено на данных 4 образцах: https://regex101.com/r/pb8Ipv/2

Если вы хотите, чтобы соответствующие группы были обработаны, замените (?: с (.

РЕДАКТИРОВАТЬ

Исправлена ​​ошибка с совпадением одиночных чисел di git после ab c

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