Это регулярное выражение:
\b\d*\.?\d+\b
// \b\d*\.?\d+\b
//
// Assert position at a word boundary «\b»
// Match a single digit 0..9 «\d*»
// Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
// Match the character “.” literally «\.?»
// Between zero and one times, as many times as possible, giving back as needed (greedy) «?»
// Match a single digit 0..9 «\d+»
// Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
// Assert position at a word boundary «\b»
Сопоставляет целое число или число с плавающей точкой с необязательной целочисленной частью.
Также для вашего первого решения:
(?<!\.)\d{3}
// (?<!\.)\d{3}
//
// Assert that it is impossible to match the regex below with the match ending at this position (negative lookbehind) «(?<!\.)»
// Match the character “.” literally «\.»
// Match a single digit 0..9 «\d{3}»
// Exactly 3 times «{3}»
Это соответствует 3 цифрам, которым не предшествует .
.
Это регулярное выражение:
\b\d*(?:\.\d+)?\b\s+
Должно совпадать только с номером. Предполагается, что числа разделены хотя бы одним пробелом, что исключает номера статьи 53.44.55, поскольку это недопустимое число. Если у вас есть другие ограничения, дайте мне знать.