在c#中使用正则表达式(或其他)将逻辑语句字符串拆分为部分和结构

本文关键字:拆分 字符串 语句 结构 正则表达式 其他 | 更新日期: 2023-09-27 17:51:18

我正在尝试拆分一系列字符串,这些字符串是逻辑测试的括号组合,并且我想将它们拆分为它们的组成部分。例如,如果我有字符串:

string logicalExpression = "((integerValue != 100) AND (stringValue == 'test' OR anotherInteger == 90) AND (anotherString == 'test2' OR anotherString == 'test3'))";

我想结束字符串变量将被定义为:

string expressionA = "integerValue != 100";
string expressionB = "stringValue == 'test'";
string expressionC = "anotherInteger == 90";
string expressionD = "anotherString == 'test2'";
string expressionE = "anotherString == 'test3'";
string expressionStructure = "((A) AND (B OR C) AND (D OR E))";

可以有任意数量的逻辑测试,and、or和括号的组合可以是构成有效逻辑测试的任何东西。

我想,一旦我有变量表达式到表达式,然后得到表达式结构是足够简单的替换函数。我想我可能可以得到expressionA到expressionE使用正则表达式-但不幸的是,我吮吸正则表达式。有人知道如何做到这一点-使用正则表达式或其他吗?

在c#中使用正则表达式(或其他)将逻辑语句字符串拆分为部分和结构

下面的代码将生成表达式A - E的结果,

string logicalExpression = "((integerValue != 100) AND(stringValue == 'test' OR anotherInteger == 90) AND(anotherString == 'test2' OR anotherString == 'test3'))";

string[] result = Regex.Matches(logicalExpression, @"(?<='().+?(?='))", RegexOptions.IgnoreCase)
                               .Cast<Match>()
                               .Select(match => match.Groups[0].Value)
                               .ToArray();
string expressionA = result[0].Substring(1);
string expressionB = result[1].Substring(0, result[1].IndexOf("OR"));
string expressionC = Regex.Match(result[1], @"OR'b(.*)'b").Value;
string expressionD = result[2].Substring(0, result[2].IndexOf("OR"));
string expressionE = Regex.Match(result[2], @"OR'b(.*)'b").Value;