Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Hands on the re.match object in Python

Things on this page are fragmentary and immature notes/thoughts of the author. Please read with your own judgement!

s = 'It is "a" good "day" today.'
s
'It is "a" good "day" today.'
import re

m = re.search('".*?"', s)
m
<_sre.SRE_Match object; span=(6, 9), match='"a"'>
m.group(0)
'"a"'
help(m.group)
Help on built-in function group:

group(...) method of _sre.SRE_Match instance
    group([group1, ...]) -> str or tuple.
    Return subgroup(s) of the match by indices or names.
    For 0 returns the entire match.

expand

m.expand()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-6-205cc63d2100> in <module>()
----> 1 m.expand()

TypeError: Required argument 'template' (pos 1) not found

group

Returns one or more subgroups of the match. If there is a single argument, the result is a single string; if there are multiple arguments, the result is a tuple with one item per argument. Without arguments, group1 defaults to zero (the whole match is returned). If a groupN argument is zero, the corresponding return value is the entire matching string; if it is in the inclusive range [1..99], it is the string matching the corresponding parenthesized group. If a group number is negative or larger than the number of groups defined in the pattern, an IndexError exception is raised. If a group is contained in a part of the pattern that did not match, the corresponding result is None. If a group is contained in a part of the pattern that matched multiple times, the last match is returned.

m = re.match(r"(\w+) (\w+)", "Isaac Newton, physicist")

The entire match.

m.group(0)
'Isaac Newton'

The first paraenthesized subgroup.

m.group(1)
'Isaac'

The second parenthesized subgroup.

m.group(2)
'Newton'

Multiple arguments give us a tuple.

m.group(1, 2)
('Isaac', 'Newton')

If the regular expression uses the (?P...) syntax, the groupN arguments may also be strings identifying groups by their group name. If a string argument is not used as a group name in the pattern, an IndexError exception is raised.

A moderately complicated example:

m = re.match(r"(?P<first_name>\w+) (?P<last_name>\w+)", "Malcolm Reynolds")
m.group("first_name")
'Malcolm'
m.group("last_name")
'Reynolds'

Named groups can also be referred to by their index:

m.group(1)
'Malcolm'
m.group(2)
'Reynolds'

If a group matches multiple times, only the last match is accessible:

m = re.match(r"(..)+", "a1b2c3")  # Matches 3 times.
m.group(1)  # Returns only the last match.
'c3'

groups

start

end

span