How do I get to *all* of the groups of an re search?
Kyler at news.Lairds.org
Sat Jan 11 04:25:59 CET 2003
Andrew Dalke <adalke at mindspring.com> writes:
>> As it is, I am resigned to understanding that Python's re
>> module makes an arbitrary and undocumented decision to return
>> the last instance of a match for a group. I'm embarrassed.
>It is documented, and behaves as documented.
Ah! It's documented in multiple places. The quote I
gave before did not mention any further restrictions to
"the contents of a group can be retrieved after a match
has been performed,"
Thank you. Any idea how I should have know to find that from
>] 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.
>As far as my research went, no standard regexp library could provide
>that sort of information. They only give the last group which
>matched a pattern.
Yes, and that surprises me. It seems so obvious that it
should return all matched pieces and so arbitrary that it
only returns the last one.
>I ended up writing my own regexp engine (!), Martel, which is at
>http://www.dalkescientific.com/Martel/ and based on mxTextTools.
Hmmmm...that's tempting. I try to limit myself to built-in
tools when I can, but it's still tempting. I appreciate
>> At the very least, the documentation should be changed to say
>> that only the last match of a group will be returned. Better
>> still would be an explanation of why the last one was chosen
>> and how that makes Python's behavior more predictable.
>It is documented.
It's not documented where a user is likely to look for the
RE syntax. The RE syntax page gives what appears to be a
very straightforward explanation of groups. I don't know
why a beginning Python user would think to look elsewhere
for some strange behavior.
>And it is consistent with other regexp libs,
I'm not as concerned about Python being like lots of other
languages as I am with it behaving the way a new programmer
might expect it to work after reading what appears to be a
>eg, I know Perl's works that way. I have 2nd ed. of Friedl's
>regexp book, but I haven't read it yet and I can't find where
>he talks about it. Still, this behaviour is highly consistent
>with the other regexp packages.
Regardless, do you find it useful? Can you think of any time
when you want to match a bunch of things and just end up with
the last one?
>You can also solve this without regexps.
I can solve it lots of ways. I went for what I thought was
going to be an elegant solution. I'd like to have a tool
that works the way I expected the re module to work.
>Show me a module besides Martel which lets you get access to
>the parse tree. I looked at about a dozen packages, read
>through Friedl's 1st edition book, and posted to various newsgroups
>looking for one.
I'm not at all interested in how popular the solution is.
More information about the Python-list