将正则表达式转换为简单表达式

时间:2011-04-23 19:54:45

标签: c#

我有这个表达式(a and b) or not (c and d)

我想将其转换为简单的a and b or not c and or not d

这在Regex中是否可行

谢谢

1 个答案:

答案 0 :(得分:2)

我认为你正在混合数学表达式和正则表达式的概念。这两件事彼此没有关系。正则表达式是一种搜索和替换字符串的工具。

看起来你正在尝试将De Morgan's laws应用于布尔表达式,将“not(C和D)”更改为“not C或not D”。这不是文本操作本身,它是Boolean algebra,并且可以通过lexing / parsing技术更好地解决。

在一个Stack Overflow答案中总结一个太大的主题,但作为概述,我建议创建一个abstract syntax tree (AST)。第一个表达式的AST看起来像这样:

     or
   /    \
 and    not
 / \     |
a   b   and
        / \
       c   d

然后,您可以通过应用布尔代数规则来操纵该树的节点。例如,De Morgan定律“not(C and D)= not C or not D”与以下子树转换相同:

 not               or
  |               /  \
 and     -->    not  not 
 / \             |    |
c   d            c    d