小编典典

用正则表达式解析布尔运算符(包括括号)?

python

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

a and (b and c) and d or e and (f or g)

假定:
括号不嵌套
术语a,b,…,z不是子表达式

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

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

有任何想法吗?


阅读 212

收藏
2020-12-20

共1个答案

小编典典

通常,您将使用递归下降解析器来执行此任务,但是您可以使用正则表达式来获取所有部分(令牌):

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)

运算符通常具有不同的优先级。在优先级相等的情况下,将首先从左到右对括号进行计算,然后对and表达式进行计算,最后对or表达式进行计算。您说要先返回括号匹配项,但是实际上您通常要做的是使用这些部分来构建表达式树并递归求值。

2020-12-20