Say I have a string
"3434.35353"
and another string
"3593"
How do I make a single regular expression that is able to match both without me having to set the pattern to something else if the other fails? I know \d+
would match the 3593
, but it would not do anything for the 3434.35353
, but (\d+\.\d+
) would only match the one with the decimal and return no matches found for the 3593
.
I expect m.group(1)
to return:
"3434.35353"
or
"3593"
So to make any group optional, we need to have to put a “?” after the pattern or group. This question mark makes the preceding group or pattern optional. This question mark is also known as a quantifier.
$ means "Match the end of the string" (the position after the last character in the string).
Regex can be used to perform various tasks in Python. It is used to do a search and replace operations, replace patterns in text, check if a string contains the specific pattern.
You can put a ?
after a group of characters to make it optional.
You want a dot followed by any number of digits \.\d+
, grouped together (\.\d+)
, optionally (\.\d+)?
. Stick that in your pattern:
import re print re.match("(\d+(\.\d+)?)", "3434.35353").group(1)
3434.35353
print re.match("(\d+(\.\d+)?)", "3434").group(1)
3434
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With