Попробуйте это:
(?<![0-9.])((?:[0-9]{1,2}|[1-9][0-9]*)(?:[.][0-9]{1,2})?)(?![0-9.])
Обратите внимание на якоря (?<!)
и (?!)
. Вы можете опустить якоря, если хотите, но якоря позволят вашему шаблону совпадать, даже если строка содержит шум, отличный от числа. (?<!X)
настаивает на том, чтобы X
не предшествовало совпадению. (?!X)
настаивает, чтобы X
не следил за матчем.
[Если вы хотите настаивать на том, что X
действительно предшествовал и / или следовал, то вместо этого вы бы привязались к (?<=X)
и / или (?=X)
.]
Исходя из характера ваших примеров, мое решение предполагает, что они приемлемы: 01.23; 00,23; 1,23. Предполагается, что это не приемлемо: 011.23; 1,234.