Вопрос:

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

python regex recursion

7461 просмотра

4 ответа

783 Репутация автора

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

Автор: giolekva Источник Размещён: 01.11.2009 10:48

Ответы (4)


3 плюса

46873 Репутация автора

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

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

Автор: reko_t Размещён: 01.11.2009 11:34

4 плюса

228836 Репутация автора

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

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

15 плюса

603464 Репутация автора

Вы могли бы использовать 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 плюса

23232 Репутация автора

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

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

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

Автор: gitaarik Размещён: 01.07.2013 02:55
Вопросы из категории :
32x32