Ваш шаблон не соответствует, потому что вы используете .*
, который сначала будет соответствовать до конца строки. Затем вы сопоставляете _
, чтобы он возвращался к последнему подчеркиванию, и пытаетесь сопоставить остальную часть шаблона.
Поскольку есть 1 подчеркивание, вы хотите сопоставить дефис, следующий за ним, но после подчеркивания нет дефиса, поэтому совпадения нет.
Другой способ написать это может быть использование класса символов с отрицанием [^-]
, не соответствующего дефису, вместо использования .*
^[^-]+-[^-]+-\d+(?:\.\d+){3}_\d+(?:\.\d+){3} $
Объяснение
^
Начало строки
[^-]+-
Совпадение 1+ раз с любым символом, кроме -
[^-]+-
То же, что и выше
\d+(?:\.\d+){3}
Математика 1+ цифр, повторите 3 раза, сопоставляя .
и 1+ цифр
_
Соответствие подчеркиванию
\d+(?:\.\d+){3}
Математика 1+ цифр, повторите 3 раза, совпадая с .
и 1+ цифрами
[ ]$
Соответствует пробелу (обозначается между скобками для ясности) и подтверждает конец строки
В Java
String regex = "^[^-]+-[^-]+-\\d+(?:\\.\\d+){3}_\\d+(?:\\.\\d+){3} $";
Regex demo
Обратите внимание, что в данных вашего примера строки заканчиваются пробелом, поэтому перед $
есть пробел