How to use regex with optional characters in python?

Posted on

Question :

How to use regex with optional characters in python?

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"
Asked By: Rolando

||

Answer #1:

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
Answered By: Jeremy

Answer #2:

This regex should work:

d+(.d+)?

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

Answered By: Igor Korkhov

Answer #3:

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.

Answered By: Li-aung Yip

Answer #4:

Read up on the Python RegEx library. The link answers your question and explains why.

However, to match a digit followed by more digits with an optional decimal, you can use

re.compile("(d+(.d+)?)")

In this example, the ? after the .d+ capture group specifies that this portion is optional.

Example

Answered By: PenguinCoder

Answer #5:

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'>```
Answered By: Coderkids Official

Leave a Reply

Your email address will not be published.