У меня есть очень длинные регулярные выражения с большим количеством групп внутри. Например,такие
((ab+)|(qwe[rty]?)|(hjk.*)|(mmm)|(ppp)|(sss))? ((ooo[0-9]?)|(ddd)|(ggg)|(jjj))kk? zzz
только длиной в 1-2 тысячи символов и с 100-200 групп и подгрупп.
Есть ли в python какие-то ограничения на длину регулярного выражения? На количество групп в нем? Еще какие-то нюансы? Или же ограничений нет вообще, и все зависит только от мощности процессора?
Пока кажется, что я не могу использовать регулярные выражения длиной более 1000 символов и/или с более, чем 100 группами.
Ответ
Судя по этому тикету в Python до версии 3.5 есть ограничение в 100 групп (capturing groups).
https://bugs.python.org/file36654/re_maxgroups.patch
-``(?P=name)``
- A backreference to a named group; it matches whatever text was matched by the
- earlier group named *name*.
+``(?P=name)``, ``(?P=number)``
+ A backreference to a group; it matches whatever text was matched by the
+ earlier group named *name* or numbered *number*.
+
+ .. versionchanged:: 3.5
+ Added support of group numbers.
``(?#...)``
A comment; the contents of the parentheses are simply ignored.
diff -r 8a2755f6ae96 Lib/sre_compile.py
--- a/Lib/sre_compile.py Thu Sep 18 19:45:04 2014 +0300
+++ b/Lib/sre_compile.py Thu Sep 18 23:27:28 2014 +0300
@@ -470,12 +470,6 @@ def compile(p, flags=0):
# print code
- # XXX:
Я бы все-таки посоветовал бы вам открыть новый вопрос и описать вашу задачу с примерами входного и "выходного" текста / данных - возможно существует более элегантное решение...
Комментариев нет:
Отправить комментарий