这与正则表达式匹配外括号非常相关,但是,我特别想知道该正则表达式的递归模式如何或是否可行?我尚未找到使用此策略的python示例,因此认为这应该是一个有用的问题!
我已经看到 了一些 索赔 是递归的模式可以用来匹配平衡括号,但使用Python的没有例子正则表达式包(注:重不支持递归模式,你需要使用正则表达式)。
一种说法是语法位于b(?:m|(?R))*e:
b是开始构造的东西,m是可能在构造中间发生的东西,是可能在构造e结束时发生的东西
我想在下面提取外括号的匹配项:
"{1, {2, 3}} {4, 5}"
["1, {2, 3}", "4, 5"] # desired
请注意,这对于内部括号很容易做到:
re.findall(r"{([^{}]*)}", "{1, {2, 3}} {4, 5}")
['2, 3', '4, 5']
(在我的示例中,我正在使用finditer(在match对象上),请参见此处。)
因此,我希望以下内容或某些变体能够起作用:
regex.findall(r"{(:[^{}]*|?R)}", "{1, {2, 3}} {4, 5}")
regex.findall(r"({(:[^{}]*|?R)})", "{1, {2, 3}} {4, 5}")
regex.findall(r"({(:.*|(?R))*})", "{1, {2, 3}} {4, 5}")
regex.findall(r"({(:.*)|(?R)*})", "{1, {2, 3}} {4, 5}")
regex.findall(r"({(:[^{}])|(?R)})", "{1, {2, 3}} {4, 5}")
但我为[]或感到沮丧error: too much backtracking。
是否可以使用正则表达式的递归为外部括号提取匹配对象?
显然,我冒着被以下人员击落的风险:
不要用正则表达式解析html
用pyparse做到这一点
编写适当的词法分析器和解析器,例如使用ply
我想强调一下这是关于如何使用递归模式的(如果我的理解是正确的,它将使我们脱离常规语言的分析范围,因此实际上可能!)。如果可以做到,那应该是一个更清洁的解决方案。