Ваш шаблон содержит (\d)\.(\d)?(\.(\d))
части, которая соответствует цифрам, то .
, то дополнительный разряд (это может быть 1 или 0), а затем .
+ цифра. Таким образом, он может соответствовать 1..2 hello
, но не 1.2 hello
.
Вы можете сделать третью группу нон-захвата и сделать его по желанию:
(\d)\.(\d)(?:\.(\d))?\s*hello
^^^ ^^
Смотрите regex demo
Если движок регулярных выражений не позволяет без захвата группы, используйте захватывая один, только вы должны будете получить значение из группы 4:
(\d)\.(\d)(\.(\d))?\s*hello
См this regex.
Обратите внимание, что я заменил .
до hello
с помощью \s*
, чтобы соответствовать нулю или более пробелам.
Обратите также внимание, что если вам нужно сопоставить эти цифры в начале строки, вы можете рассмотреть предустановленный шаблон с помощью ^
(и в зависимости от вашего двигателя/инструмента регулярного выражения, модификатора m
).