如何在python中实现递归正则表达式?

gio*_*kva 14 python regex recursion

我很感兴趣如何在Python中实现递归正则表达式匹配(我没有找到任何示例:().例如,如何编写表达式匹配"支架平衡"字符串,如"foo(bar(bar(foo)) )(foo1)BAR1"

unu*_*tbu 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)
Run Code Online (Sandbox Code Playgroud)

运行它产生:

% test.py "foo(bar(bar(foo)))(foo1)bar1"
['foo', ['bar', ['bar', ['foo']]], ['foo1'], 'bar1']
Run Code Online (Sandbox Code Playgroud)


git*_*rik 11

这是一个老问题,但对于通过搜索来到这里的人来说:

python的另一个正则表达式模块支持递归模式:https: //pypi.python.org/pypi/regex

它有很多更好的改进re.

  • 这个引擎会在某个时候合并到python的stdlib中吗?我似乎无法找到关于此的任何最近的谈话. (2认同)
  • 这个答案真的会从一个例子中受益!:) (2认同)

Joh*_*ooy 4

你不能用正则表达式来做到这一点。Python 不支持递归正则表达式