Причина 45 не в группе в том, что вы повторяете вторую группу захвата.Когда вы повторяете группу захвата, группа содержит значение последней итерации.
Таким образом, (,\d+(-\d+)*)
будет захватывать ,45
.Теперь вся группа повторяется из-за внешнего *
и в этой последней итерации ,50
захватывается ,\d+
, а -53
захватывается -\d+
То, что вы можете сделать, это совпадение 1+ цифры и используйте одну необязательную группу для дефиса и 1+ цифры часть, чтобы получить 3 совпадения.
Используйте положительный прогноз (?=,|$)
, чтобы утверждать, что непосредственно справа находится запятая или конец строки.
\d+(?:-\d+)?(?=,|$)
Regex demo
Если вы хотите 3 группы, вы можете использовать:
(\d+(?:-\d+)?),(\d+(?:-\d+)?),(\d+(?:-\d+)?)
Regex demo