将正则表达式转换为简单的正则表达式
本文关键字:正则表达式 简单 转换 | 更新日期: 2023-09-27 17:53:07
我有这个表达式(a and b) or not (c and d)
我想把它转换成一个简单的a and b or not c and or not d
在Regex
中可能吗?谢谢
我想你把数学表达式和正则表达式的概念混在一起了。这两件事毫无关系。正则表达式是搜索和替换字符串片段的工具。
看起来你正试图将De Morgan定律应用于布尔表达式,将"not (C and D)"更改为"not C or not D"。这不是文本操作本身,它是布尔代数,可以通过词法分析/解析技术更好地解决。
这是一个太大的主题,不能在一个Stack Overflow答案中总结,但是作为一个概述,我建议创建一个抽象语法树(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