我有这个表达式(a and b) or not (c and d)
我想将其转换为简单的a and b or not c and or not d
这在Regex中是否可行
谢谢
答案 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