解析布尔运算包括带正则表达式的括号?

nik*_*ola 5 javascript python regex

是否有一个正则表达式可以解析表示简单布尔算术的字符串(在Python和/或Javascript中,不需要是相同的表达式)?例如,我想解析这个字符串:

a and (b and c) and d or e and (f or g)
Run Code Online (Sandbox Code Playgroud)

假设:
*括号不嵌套
*术语a,b,...,z不是子表达式

生成的捕获应首先按括号分组,然后再使用相同或更简单的正则表达式再次解析.

我已经成功地编写了一个天真的正则表达式来解析没有括号的布尔运算.

有任何想法吗?

Mar*_*ers 2

通常,您会使用递归下降解析器来完成此任务,但您可以使用正则表达式获取所有部分(标记):

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)
Run Code Online (Sandbox Code Playgroud)

运算符通常具有不同的优先级。首先计算括号,然后and计算表达式,最后or计算表达式,如果优先级相同,则按从左到右的顺序计算。您说您想首先返回括号匹配项,但实际上您通常要做的是使用这些部分构建表达式树并递归地对其进行评估。

  • +1,请注意,如果括号确实嵌套,您将需要采取完全不同的方法,因为正则表达式无法处理计数(即嵌套任何内容) (2认同)