Bug in re.findall?

Peter Otten __peter__ at web.de
Fri Jul 4 13:24:53 CEST 2008


Marcin Krol wrote:

> Hello everyone,
> 
> Is there a bug in re.findall in Python 2.4? See:
> 
> subnetlist="192.168.100.0 , 192.168.101.0"
> ipre=re.compile("([0-9]{1,3}\.){3}[0-9]{1,3}")
> 
>  >>> ipre.findall(subnetlist)
> 
> ['100.', '101.']
> 
> 
> But:
> 
> a=ipre.finditer(subnetlist)
> 
>  >>> a.next().group()
> '192.168.100.0'
>  >>> a.next().group()
> '192.168.101.0'
>  >>> a.next().group()
> Traceback (most recent call last):
>    File "<stdin>", line 1, in ?
> StopIteration
> 
> Also:
> 
>  >>> ipre.search(subnetlist).group()
> '192.168.100.0'
> 
> Is this a bug or am I doing smth wrong?

>From the doc:

"""
findall(  pattern, string[, flags])
 Return a list of all non-overlapping matches of pattern in string. If one
or more groups are present in the pattern, return a list of groups; this
will be a list of tuples if the pattern has more than one group.
"""

So findall()'s behaviour changes depending on the number of explicit groups

None:

[m.group() for m in re.finditer(...)] 

One:

[m.group(1) for m in re.finditer(...)]

More than one:

[m.groups() for m in re.finditer(...)]

all in accordance with the documentation.

Peter



More information about the Python-list mailing list