Bug in re.findall?

dwahli at gmail.com dwahli at gmail.com
Fri Jul 4 07:21:25 EDT 2008


On Jul 4, 12:33 pm, Marcin Krol <mrk... at gmail.com> 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?

Look strange but match the Python documentation for re.findall:
"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"

you must use this RE for your example to match what you expect:
ipre=re.compile("(?:[0-9]{1,3}\.){3}[0-9]{1,3}")

but using re.finditer is IMHO better.

Cheer,
Dom



More information about the Python-list mailing list