Как рекурсивное регулярное выражение может быть реализовано в python?

python regex recursion

7461 просмотра

4 ответа

Меня интересует, как можно реализовать рекурсивное сопоставление регулярных выражений в Python (я не нашел никаких примеров :(). Например, как написать выражение, которое соответствует "сбалансированной по скобкам" строке, например "foo (bar (bar (foo))" ) (foo1) BAR1"

Автор: giolekva Источник Размещён: 13.11.2019 11:49

Ответы (4)


15 плюса

Вы могли бы использовать 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']
Автор: unutbu Размещён: 01.11.2009 12:37

11 плюса

Это старый вопрос, но для людей, которые приходят сюда через поиски:

Существует альтернативный модуль регулярных выражений для python, который поддерживает рекурсивные шаблоны: https://pypi.python.org/pypi/regex

И в нем есть много приятных улучшений re.

Автор: gitaarik Размещён: 01.07.2013 02:55

4 плюса

Вы не можете сделать это с помощью регулярного выражения. Python не поддерживает рекурсивное регулярное выражение

Автор: John La Rooy Размещён: 01.11.2009 11:35

3 плюса

К сожалению, я не думаю, что регулярные выражения Python поддерживают рекурсивные шаблоны.

Вы можете, вероятно, разобрать его с помощью чего-то вроде pyparsing: http://pyparsing.wikispaces.com/

Автор: reko_t Размещён: 01.11.2009 11:34
Вопросы из категории :
32x32