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
m.group(1) to return:
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+)?. Stick that in your pattern:
import re print re.match("(d+(.d+)?)", "3434.35353").group(1)
print re.match("(d+(.d+)?)", "3434").group(1)
This regex should work:
It matches one ore more digits (
d+) optionally followed by a dot and one or more digits (
Use the “one or zero” quantifier,
?. Your regex becomes:
See Chapter 8 of the TextWrangler manual for more details about the different quantifiers available, and how to use them.
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
In this example, the ? after the
.d+ capture group specifies that this portion is optional.
<characters> with the string to make optional. I tested in python shell and got the following result:
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'>```s = re.