I have this pattern:
[0-9]*\\.?[0-9]
It matches numbers but it also matches 3.5.4 as:
How to f
To match a json number:
^[-]?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?$
Use this regex to match .123
:
^[-]?((0|[1-9][0-9]*)(\.[0-9]+)?|\.[0-9]+)([eE][+-]?[0-9]+)?$
Your regex is not anchored. If you want to match lines that contain only numbers and nothing else use:
^[0-9]*\.?[0-9]$
You have to decide if you want to accept numbers without leading zeros (eg .123). If you don't then the regex is easy:
^-?[0-9]+(\.[0-9]+)?$
If you do then it's a little more complex:
^-?(?:[0-9]+|[0-9]*\.[0-9]+)$
Both presume that a decimal point must be followed by at least one digit. If you don't accept negative numbers then the leading -?
is unnecessary.
You should not use a regex for this unless you really need to.
Instead, you should use your language's built-in number parsing methods.
I assume from your other questions that you're using Javascript; if so, you should call parseFloat
.
Updated answer after comment from poster:
Use lookahead / lookbehind to make sure that the characters before and after are spaces:
Here's a version that closely matches yours, but that won't make partial matches:
(?:^|(?<=\s))[0-9]*\.?[0-9](?=\s|$)
For both these examples, when run on the string 1 2.3.4 5.6
it matches only 1
and 5.6
.