All,
perl has a regex assertion (\G) that allows multiple-match regular
expressions to be able to use the position of the last match. Perl's
documentation puts it this way:
\G Match only at pos() (e.g. at the end-of-match position of prior m//g)
Anyways, this is exceedingly powerful for matching regularly
structured free-form records, and I was really surprised when I found
out that python did not have it. For example, if findall supported
this, it would be possible to write things like this (a quick and
dirty ifconfig parser):
pat = re.compile(r'\G(\S+)(.*?\n)(?=\S+|\Z)', re.S)
val = """
eth2 Link encap:Ethernet HWaddr xx
inet addr: xx.xx.xx.xx Bcast:xx.xx.xx.xx Mask:xx.xx.xx.xx
...
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
"""
matches = re.findall(pat, val)
So - why doesn't python have this? is it something that simply was
overlooked, or is there another method of doing the same thing with
arbitrarily complex freeform records?
thanks much..
_______________________________________________
Python-Dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com