Дополнительная группа Regex

Я использую это регулярное выражение:

((?:[a-z][a-z]+))_(\d+)_((?:[a-z][a-z]+)\d+)_(\d{13})

для соответствия строк следующим образом:

SH_6208069141055_BC000388_20110412101855

разделяющий на 4 группы:

SH
6208069141055
BC000388
20110412101855

Вопрос: Как сделать первую группу необязательной, чтобы итоговая группа была пустой строкой?
Я хочу получить 4 группы в каждом случае, когда это возможно.

Входная строка для этого случая: (без подчеркивания после первой группы)

6208069141055_BC000388_20110412101855

Ответ 1

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

(?:([a-z]{2,})_)?(\d+)_([a-z]{2,}\d+)_(\d+)$

Я не уверен, будет ли строка ввода без первой группы иметь знак подчеркивания или нет, но вы можете использовать указанное выше выражение, если оно целая строка.

regex101 demo

Как вы можете видеть, согласованная группа 1 во втором совпадении пуста и начинается с согласованной группы 2.