Closes #14342: remove out-of-date section about avoiding recursion errors.
This commit is contained in:
parent
f354f8e369
commit
ce54617260
|
@ -1077,28 +1077,6 @@ The equivalent regular expression would be ::
|
||||||
(\S+) - (\d+) errors, (\d+) warnings
|
(\S+) - (\d+) errors, (\d+) warnings
|
||||||
|
|
||||||
|
|
||||||
Avoiding recursion
|
|
||||||
^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
If you create regular expressions that require the engine to perform a lot of
|
|
||||||
recursion, you may encounter a :exc:`RuntimeError` exception with the message
|
|
||||||
``maximum recursion limit`` exceeded. For example, ::
|
|
||||||
|
|
||||||
>>> s = 'Begin ' + 1000*'a very long string ' + 'end'
|
|
||||||
>>> re.match('Begin (\w| )*? end', s).end()
|
|
||||||
Traceback (most recent call last):
|
|
||||||
File "<stdin>", line 1, in ?
|
|
||||||
File "/usr/local/lib/python2.5/re.py", line 132, in match
|
|
||||||
return _compile(pattern, flags).match(string)
|
|
||||||
RuntimeError: maximum recursion limit exceeded
|
|
||||||
|
|
||||||
You can often restructure your regular expression to avoid recursion.
|
|
||||||
|
|
||||||
Starting with Python 2.3, simple uses of the ``*?`` pattern are special-cased to
|
|
||||||
avoid recursion. Thus, the above regular expression can avoid recursion by
|
|
||||||
being recast as ``Begin [a-zA-Z0-9_ ]*?end``. As a further benefit, such
|
|
||||||
regular expressions will run faster than their recursive equivalents.
|
|
||||||
|
|
||||||
.. _search-vs-match:
|
.. _search-vs-match:
|
||||||
|
|
||||||
search() vs. match()
|
search() vs. match()
|
||||||
|
|
Loading…
Reference in New Issue