How to use regex with optional characters in python?


Question

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"
1
24
3/27/2012 2:48:21 PM

Accepted Answer

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
51
3/27/2012 2:45:13 PM

This regex should work:

\d+(\.\d+)?

It matches one ore more digits (\d+) optionally followed by a dot and one or more digits ((\.\d+)?).


Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon