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

C# 将正则表达式转换为简单表达式,c#,C#,我有这个表达式(a和b)或者没有(c和d) 我想把它转换成一个简单的a和b,或者不是c,或者不是d 这在正则表达式中可能吗 谢谢我认为你把数学表达式和正则表达式的概念混为一谈了。这两件事没有关系。正则表达式是搜索和替换字符串片段的工具 看起来您正试图应用于布尔表达式,将“not(C和D)”更改为“not C或not D”。这不是文本操作本身,而是通过词法分析/解析技术解决的 这是一个太大的主题,不能用一个堆栈溢出的答案来概括,但作为一个概述,我建议创建一个。第一个表达式的AST如下所示:

我有这个表达式
(a和b)或者没有(c和d)

我想把它转换成一个简单的
a和b,或者不是c,或者不是d

这在正则表达式中可能吗


谢谢

我认为你把数学表达式和正则表达式的概念混为一谈了。这两件事没有关系。正则表达式是搜索和替换字符串片段的工具

看起来您正试图应用于布尔表达式,将“not(C和D)”更改为“not C或not D”。这不是文本操作本身,而是通过词法分析/解析技术解决的

这是一个太大的主题,不能用一个堆栈溢出的答案来概括,但作为一个概述,我建议创建一个。第一个表达式的AST如下所示:

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

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

给我们你尝试过的实际正则表达式,你的输入,什么有效,什么无效要求是wierd,我不确定我是否真的理解,但我不认为正则表达式是适合它的工具。这是一个布尔表达式还是一些文本?还有,你到底在转换什么?您是在表达式中删除大括号还是应用DeMorgans?或者完全是别的什么。而且,转换的结果没有意义。。。“不是c或不是b”是什么意思?乍一看,这个问题似乎根本不适合正则表达式;也许更多的细节会帮助社区给你更好的回答。我有一些文本包含单词,我想根据这个模式在它们之间搜索,单词由[a-b-c-d]表示,我想将模式[(a和b)或非(c和d)]转换为[a和b或非c或非d]以允许我进行搜索。。。。。。thanksI同意这在使用正则表达式的一般情况下肯定是不可解的,但在有限数量的特定情况下可能是可解的。正则表达式是否可行或合理将取决于解决方案的通用性。