How to use regex with optional characters in python?


Say I have a string


and another string


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 to return:



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)
print re.match("(\d+(\.\d+)?)", "3434").group(1)
3/27/2012 2:45:13 PM

This regex should work:


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