How to use regex with optional characters in python?

Use the "one or zero" quantifier, ?. Your regex becomes: (\d+(\.\d+)?).

See Chapter 8 of the TextWrangler manual for more details about the different quantifiers available, and how to use them.


This regex should work:

\d+(\.\d+)?

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


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

use (?:<characters>|). replace <characters> with the string to make optional. I tested in python shell and got the following result:

>>> s = re.compile('python(?:3|)')
>>> s
re.compile('python(?:3|)')
>>> re.match(s, 'python')
<re.Match object; span=(0, 6), match='python'>
>>> re.match(s, 'python3')
<re.Match object; span=(0, 7), match='python3'>```

Tags:

Python

Regex