Это ваше регулярное выражение:
(0(?:[0-9]|[A-F]){3})
(\"\*?(?:SIA-DCS|ADM-CID|NULL)\")
(\d{4})
(R?(?:[0-9]|[A-F])*)
(L[^#]*)
(#[^\[]*)
(\[[^\[]*)
(\[(?:M|V|P)(?:[^\[])*])
У вас есть только 8 групп захвата , ни одна из них не повторяется. Как вы думаете, почему должно получиться 10 групп?
ОК, из-за (?:M|V|P)
последней группы, он мог бы соответствовать содержимому 3 последних квадратных скобок, но эта группа не повторяется, поэтому она будет соответствовать только первой.
У вас есть 2 возможности.
Поставьте квантификатор за последней группой
(0(?:[0-9]|[A-F]){3})(\"\*?(?:SIA-DCS|ADM-CID|NULL)\")(\d{4})(R?(?:[0-9]|[A-F])*)(L[^#]*)(#[^\[]*)(\[[^\[]*)(\[(?:M|V|P)(?:[^\[])*])+
или
(0(?:[0-9]|[A-F]){3})(\"\*?(?:SIA-DCS|ADM-CID|NULL)\")(\d{4})(R?(?:[0-9]|[A-F])*)(L[^#]*)(#[^\[]*)(\[[^\[]*)(\[(?:M|V|P)(?:[^\[])*]){3}
теперь будет соответствовать строке до конца, но осталось только 8 групп захвата, и содержимое последней группы больше не является "[Vanydata]", это последнее совпадение этой группы "[Panydata]"
Добавьте еще две группы к своему регулярному выражению
(0(?:[0-9]|[A-F]){3})(\"\*?(?:SIA-DCS|ADM-CID|NULL)\")(\d{4})(R?(?:[0-9]|[A-F])*)(L[^#]*)(#[^\[]*)(\[[^\[]*)(\[(?:M|V|P)(?:[^\[])*])(\[(?:M|V|P)(?:[^\[])*])(\[(?:M|V|P)(?:[^\[])*])
Теперь у него есть 10 групп захвата, и результат такой, как вы ожидали. Если начальная буква этих трех последних групп всегда одинакова для каждой группы, вы можете упростить ее до
(0(?:[0-9]|[A-F]){3})(\"\*?(?:SIA-DCS|ADM-CID|NULL)\")(\d{4})(R?(?:[0-9]|[A-F])*)(L[^#]*)(#[^\[]*)(\[[^\[]*)(\[V(?:[^\[])*])(\[M(?:[^\[])*])(\[P(?:[^\[])*])
Посмотрите здесь на Regexr
Обновление
Вы можете сделать что-то необязательное, добавив после него знак вопроса
(0(?:[0-9]|[A-F]){3})(\"\*?(?:SIA-DCS|ADM-CID|NULL)\")(\d{4})(R?(?:[0-9]|[A-F])*)(L[^#]*)(#[^\[]*)(\[[^\[]*)(\[[VMP](?:[^\[])*])?(\[[VMP](?:[^\[])*])?(\[[VMP](?:[^\[])*])?
См. здесь, в Regexr , при наведении курсора на совпадение отображается содержимое групп захвата.