4 回答
TA贡献1802条经验 获得超5个赞
正则表达式尝试尽可能多地匹配文本,从而消耗所有字符串。它不会在该字符串的某些部分上查找正则表达式的其他匹配项。这就是为什么你只得到一个答案。
解决方案是不使用正则表达式。如果您实际上正在尝试解析数学表达式,请使用真正的解析解决方案。如果你真的只想捕获括号内的碎片,只需在你看到(和)时递增字符计数并递增一个递减计数器。
TA贡献1804条经验 获得超7个赞
正如其他人所提到的,正则表达式不是嵌套构造的方法。我将使用pyparsing给出一个基本的例子:
import pyparsing # make sure you have this installed
thecontent = pyparsing.Word(pyparsing.alphanums) | '+' | '-'
parens = pyparsing.nestedExpr( '(', ')', content=thecontent)
这是一个用法示例:
>>> parens.parseString("((a + b) + c)")
输出:
( # all of str
[
( # ((a + b) + c)
[
( # (a + b)
['a', '+', 'b'], {}
), # (a + b) [closed]
'+',
'c'
], {}
) # ((a + b) + c) [closed]
], {}
) # all of str [closed]
(手动完成换行/缩进/注释)
编辑:修改以消除不必要的Forward,根据Paul McGuire的建议。
以嵌套列表格式获取输出:
res = parens.parseString("((12 + 2) + 3)")
res.asList()
输出:
[[['12', '+', '2'], '+', '3']]
添加回答
举报