В вашем регулярном выражении вы соответствуете .?
, который будет соответствовать необязательному символу (любому символу, кроме символа новой строки), а в ваших данных будет, например, r
в ризотто или c
в кориандре.
Вы можете использовать якорь, чтобы утверждать начало строки и сопоставлять цифры 1+, а затем необязательную часть, которая соответствует точке и цифрам 1+.
После этого матча вы можете добавить тот же необязательный шаблон с начальными пробелами или табуляцией 1+:
^\d+(?:\.\d+)?(?:[ \t]+\d+(?:\.\d+))?
В Java
String regex = "^\\d+(?:\\.\\d+)?(?:[ \\t]+\\d+(?:\\.\\d+))?";
Это будет соответствовать
^
начало строки \d+(?:\.\d+)?
Совпадение цифр 1+, за которыми следует необязательная часть ?
, которая соответствует точке и цифрам 1+ (?:
Группа без захвата [ \t]+\d+(?:\.\d+)
соответствует 1+ разу пробелу или табуляции, 1+ цифрам и снова сопровождается необязательной частью, которая соответствует точке и 1+ цифрам
)?
Закройте группу без захвата и сделайте ее необязательной
Обратите внимание, что если вы хотите сопоставить второй шаблон 0+ раз вместо того, чтобы сделать его необязательным, вы можете использовать *
вместо ?
Regex demo | Java демо