Regex to match 2 digits, optional decimal, two digits
EDIT: Changed to fit other feedback.
I understood you to mean that if there is no decimal point, then there shouldn't be two more digits. So this should be it:
\d{0,2}(\.\d{1,2})?
That should do the trick in most implementations. If not, you can use:
[0-9]?[0-9]?(\.[0-9][0-9]?)?
And that should work on every implementation I've seen.
You mentioned that you want the regex to match each of those strings, yet you previously mention that the is 1-2 digits before the decimal?
This will match 1-2 digits followed by a possible decimal, followed by another 1-2 digits but FAIL on your example of .33
\d{1,2}\.?\d{1,2}
This will match 0-2 digits followed by a possible deciaml, followed by another 1-2 digits and match on your example of .33
\d{0,2}\.?\d{1,2}
Not sure exactly which one you're looking for.
(?<![\d.])(\d{1,2}|\d{0,2}\.\d{1,2})?(?![\d.])
Matches:
- Your examples
- 33.
Does not match:
- 333.33
- 33.333
To build on Lee's answer, you need to anchor the expression to satisfy the requirement of not having more than 2 numbers before the decimal.
If each number is a separate string, you can use the string anchors:
^\d{0,2}(\.\d{1,2})?$
If each number is within a string, you can use the word anchors:
\b\d{0,2}(\.\d{1,2})?\b