Как можно реализовать рекурсивное регулярное выражение в python?
Мне интересно, как можно реализовать рекурсивное совпадение регулярных выражений в Python (я не нашел примеров:(). Например, как бы написать выражение, которое соответствует "сбалансированной балансировке" строки, например "foo (bar (bar (bar) Foo))) (foo1) BAR1"
Ответы
Ответ 1
Вы можете использовать pyparsing
#!/usr/bin/env python
from pyparsing import nestedExpr
import sys
astring=sys.argv[1]
if not astring.startswith('('):
astring='('+astring+')'
expr = nestedExpr('(', ')')
result=expr.parseString(astring).asList()[0]
print(result)
Запуск:
% test.py "foo(bar(bar(foo)))(foo1)bar1"
['foo', ['bar', ['bar', ['foo']]], ['foo1'], 'bar1']
Ответ 2
Это старый вопрос, но для людей, которые приходят сюда через поисковые запросы:
Существует альтернативный модуль регулярных выражений для python, который поддерживает рекурсивные шаблоны:
https://pypi.python.org/pypi/regex
И он имеет много приятных улучшений на re
.
Ответ 3
Вы не можете сделать это с помощью регулярного выражения. Python не поддерживает рекурсивное регулярное выражение
Ответ 4
К сожалению, я не думаю, что регулярные выражения Python поддерживают рекурсивные шаблоны.
Возможно, вы можете разобрать его с помощью чего-то вроде pyparsing: http://pyparsing.wikispaces.com/