re module - error with non-greedy matches

Darrell dgallion1 at yahoo.com
Fri Jan 11 12:57:23 EST 2002


non-greedy can fail as you've seen, when using a large buffer.

>>> import pre, re
>>> buf='x'+'y'*10000
>>> re.search("x.*?x",buf)
>>> pre.search("x.*?x",buf)
>>> buf='x'+'y'*100000
>>> pre.search("x.*?x",buf)
>>> re.search("x.*?x",buf)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "c:\python22\lib\sre.py", line 137, in search
    return _compile(pattern, flags).search(string)
RuntimeError: maximum recursion limit exceeded


pre is the older engine and sre is the new one.
re.py has this:
     engine = "sre"
   # engine = "pre"

sre is faster in many cases.
There is a fix in the works for sre, but it won't be out for a while.
(I can't find the note about that)

--Darrell

Derek Thomson <derekt at dstc.qut.edu.au> wrote in message news:<3C3D381F.2030907 at dstc.qut.edu.au>...
> 
> I'm sure this works, but I really need to know that Python regexes 
> aren't broken before I can seriously use Python for all my scripting 
> needs.



More information about the Python-list mailing list