我试图提取嵌套方括号中的字符串并生成它们。在
假设我有下面的字符串
string = "(A((B|C)D|E|F))"
根据Extract string inside nested brackets中的答案
我可以提取嵌套方括号内的字符串,但对于我的情况,它是不同的,因为我在括号的末尾有"D"
,所以这是代码的结果。它看起来离我想要的输出还很远
这是我想要的输出
[[['A'],['B|C'],['D']], [['A'],['E|F']']] # '|' means OR
你有什么建议吗,我应该用正则表达式实现还是只运行所有给定的字符串?在
这样就可以得出我的最终结果,也就是说
"ABD"
"ACD"
"AE"
"AF"
在这一点上,我将使用itertools.product
我建议立即找到一个以最终结果为目标的解决方案。因此,一个函数可以进行这种转换:
以下是我建议的准则:
^{pr2}$看到它运行在repl.it
您没有精确地指定语言,但看起来允许任意嵌套方括号。它不是一种普通语言。我不建议用正则表达式来解析它(这可能是因为python中的正则表达式不是真正的正则表达式,但是即使有可能,也可能是一团糟)。在
我建议为您的语言定义一个上下文无关的语法,然后解析它。你可以这样做:
这种语法可以由一个简单的自顶向下的递归解析器来解析,它在线性时间内工作。下面是一个示例实现:
^{pr2}${如果你不熟悉这个技巧的话。在
这个实现不是最有效的实现(例如,它显式地使用列表而不是迭代器),但它是一个很好的起点。在
相关问题 更多 >
编程相关推荐