Как определить это регулярное выражение с чередованием, чтобы иметь одинаковое количество групп в матче?

Я пытаюсь разобрать такие строки

99_GOG_A_X1_FOO X-2014-09
99_YAK_A_YZ1_BAR YZY-2014-10

с этим регулярным выражением

99_\w{3}_(A|B)_((X)(0*[1-9][0-9]?)_(FOO|BAR) X-(\b0*20(1[4-9]|[2-9][0-9])\b)-\b0*([1-9]|1[0-2])\b|(YZ)(0*[1-9][0-9]?)_(FOO|BAR) YZY-(\b0*20(1[4-9]|[2-9][0-9])\b)-\b0*([4]|1[0])\b)

Первый вход может иметь только от 1 до 12 в конце, в то время как второй вход может иметь только 04 или 10. Это работает. но я хотел бы иметь решение, которое возвращает только соответствующие группы.

С этим решением у меня есть эти группы http://www.regexplanet.com/cookbook/ahJzfnJlZ2V4cGxhbmV0LWhyZHNyDwsSBlJlY2lwZRiwuuALDA/index.html

У меня есть лишние группы, и совпадающие группы не имеют одинаковых индексов для обоих входов.

Есть ли способ избавиться от пустых групп и выровнять индексы?

Обновление: я должен соблюдать следующие правила. Если вход соответствует этому _((X)(0*[1-9][0-9]?) он также должен содержать X- и позвольте этому диапазону в конце \b0*([4]|1[0])\b

Если вход соответствует этому _(YZ)(0*[1-9][0-9]?) он также должен содержать YZY- и разрешить только эти входы в конце \b0*([4]|1[0])\b

Итак, я хочу объединить эти регулярные выражения:

^99_\w{3}_(A|B)_(X)(0*[1-9][0-9]?)_(FOO|BAR) X-(\b0*20(1[4-9]|[2-9][0-9])\b)-\b0*([1-9]|1[0-2])\b$
^99_\w{3}_(A|B)_(YZ)(0*[1-9][0-9]?)_(FOO|BAR) YZY-(\b0*20(1[4-9]|[2-9][0-9])\b)-\b0*([4]|1[0])\b$

1 ответ

Из того, что я понимаю, это может работать для вас:

99_\w{3}_(A|B)_((X|(?>YZ))(0*[1-9][0-9]?)_(FOO|BAR) \3Y?-(\b0?20(1[4-9]|[2-9][0-9])\b)-\b0?((?:[1-9]|1[0-2])|(?:[4]|1[0]))\b$)

DEMO

Если это не удастся (что может случиться), вы должны рассмотреть возможность использования реального кода, чтобы убедиться, что он проходит " ((X)(0*[1-9][0-9]?) он также должен содержать X- и позвольте этому диапазону в конце \b0*([4]|1[0])\b "

Используйте группы захвата, чтобы проверить, \3 == 'X' или если \3 == 'YZ' а затем применить остальное регулярное выражение при необходимости

Другие вопросы по тегам