是否有一个正则表达式可以解析表示简单 bool 算术的字符串(在 Python 和/或 Javascript 中,不需要是相同的表达式)?例如我想解析这个字符串:
a and (b and c) and d or e and (f or g)
假设:
* 括号不嵌套
* 术语 a, b, ..., z 不是子表达式
生成的捕获应首先按括号分组,然后我使用相同或更简单的正则表达式再次解析。
我已经成功地编写了一个朴素的正则表达式来解析不带括号的 bool 算术。
有什么想法吗?
最佳答案
通常您会使用例如 recursive descent parser对于此任务,但您可以使用正则表达式获取所有部分(标记):
x = 'a and (b and c) and d or e and (f or g)'
import re
matches = re.findall(r'\(.*?\)|\w+', x)
print ','.join(matches)
运营商通常有不同的precedence .括号将首先被评估,然后是 和
表达式,最后是 或
表达式,在优先级相同的情况下从左到右的顺序。你说你想先返回括号匹配,但实际上你通常会做的是使用这些部分构建一个表达式树并递归地计算它。
关于javascript - 使用正则表达式解析 bool 算术,包括括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2118261/