当前位置: 首页 > 面试题库 >

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

纪枫
2023-03-14
问题内容

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

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

假定:
括号不嵌套

术语a,b,…,z不是子表达式

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

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

有任何想法吗?


问题答案:

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

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表达式进行计算。您说要先返回括号匹配项,但是实际上您通常要做的是使用这些部分来构建表达式树并递归求值。



 类似资料:
  • 问题内容: 当我使用某种方式时,它仍然会触发,好像连字符无效。我试着和 问题答案: 转义使用应该没问题,但是您也可以尝试将其放在字符类的开头或结尾。这应该为您工作:

  • 我们已经学习了如何使用运算符、操作数和表达式——这些使任何程序的基本组成部分。接下来,我们将学习如何通过语句在我们的程序中使用这些部分。

  • 问题内容: 在Java中,我试图编写一个与数学表达式中的一个单元匹配的正则表达式,即运算符之间的内容 我的意思是,在类似1 + [1 + 2]的表达式中,正则表达式应匹配前1个,然后匹配[1 + 2]。 我所拥有的是* [([-+]?\ d +(\。\ d +)?)(\ [。+ \])] * 其中([-+]?\ d +(\。\ d +)?)应该匹配任何数字,并且 (\ [。+ \]) 应该匹配括号

  • 我想将带有嵌套大括号的原始字符串解析为多维数组。下面我添加了一些有效的示例代码。但主要问题是,我的正则表达式只捕获第一个匹配的组,而忽略了另一个发生。 非常感谢您的帮助。 代码: 原始字符串(data.txt): 代码输出: 但例外输出:

  • 对于我的DBAL,我需要解析提供SQL[mysql方言,特别是]字符串来查找所有占位符。 但是,当然,我不想解析任何类似占位符的组合,这些组合偶尔可能出现在带引号的文本中——单引号、双引号或反引号。 说,这可能是 只有最后一个问号是唯一实际的占位符 给定大量的转义规则,其中一些规则取决于当前的DB设置(、等),这可以将上述查询转换为 我怀疑这项任务是否可行。 但是,我仍然希望它能够完成,甚至可能是

  • 问题内容: 我想编写一个简单的正则表达式来检查给定字符串中是否存在任何特殊字符。我的正则表达式可以工作,但是我不知道为什么它还包括所有数字,所以当我输入一些数字时会返回错误。 我的代码: 问题答案: 请不要那样做…… 像这样的小Unicode BABY ANGEL 快要死了!◕◡◕(←这些不是图像)(箭头也不是!) 而且您正在杀死20年的DOS:-)(最后一个笑脸称为WHITE SMILING F