Regular Expression Non Capturing Grouping Does Not Work.

Peter Otten __peter__ at web.de
Sat Jun 27 03:45:47 EDT 2009


Virtual Buddha wrote:

> Hello all,
> 
> I am having some difficulties with the non-capturing grouping in
> python regular expression module.
> 
> Even the code from the online documentation (http://docs.python.org/
> howto/regex.html#non-capturing-and-named-groups) does not seem to
> work.
> 
> As per the docs given in the link above this should happen (text
> copied from the page):
> 
>>>> m = re.match("([abc])+", "abc")
>>>> m.groups()
> ('c',)
>>>> m = re.match("(?:[abc])+", "abc")
>>>> m.groups()
> ()
> 
> BUT, this is what I get:
> 
>>>> m = re.match("([abc])+", "abc")
>>>> m.group()
> 'abc'
>>>> m = re.match("(?:[abc])+", "abc")
>>>> m.group()
> 'abc'
> 
> I am using python 2.6 on opensuse 11.1. Any one know what I might be
> doing wrong? Or is this a bug?

group != groups

match.group() or match.group(0) gives you a special group that comprises the 
whole match. Regular capturing groups start at index 1, and only those are 
returned by match.groups():

>> re.match("(?:[abc])+", "abc").group() # one group
'abc'
>>> re.match("(?:[abc])+", "abc").groups() # all capturing groups
()

Peter




More information about the Python-list mailing list