C#正则表达式,用于在嵌套括号内匹配特定文本

C#正则表达式,用于在嵌套括号内匹配特定文本,c#,regex,nested,parentheses,C#,Regex,Nested,Parentheses,我有以下代码行用于括号之间的take-to运算符: string filtered = Regex.Replace(input, "\\(.*?\\)", string.Empty); var result = filtered.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries) .Where(element => element == "OR" || element ==

我有以下代码行用于括号之间的take-to运算符:

string filtered = Regex.Replace(input, "\\(.*?\\)", string.Empty);
var result = filtered.Split(new[] { ' ' }, 
            StringSplitOptions.RemoveEmptyEntries)
            .Where(element => element == "OR" || element == "AND");    
string temp = string.Join(" ", result);
这些行不适用于嵌套括号

比如,;它正在为该输入工作

X1 OR ( X2 AND X3 AND X4 AND X5 ) OR X6
它给了我这个结果:

但是,当我的输入有多个嵌套的括号时,它会错误地工作

对于此输入:

X1 OR ( X2 AND( X3 AND X4 ) AND X5 ) OR X6
我想取结果,但它会打印

虽然字符串中有两个
字符,但在匹配第一个
字符后结束处理时)
字符

如何调整我的正则表达式模式

您的
\(.*?)
正则表达式包含3个部分:1)
\(
匹配文字
,2)
*?
惰性点匹配模式(匹配0+除换行符以外的任何字符,尽可能少,直到第一个
,以及3)匹配文字

如果字符串不能有转义序列,请使用

@"\((?>[^()]|(?<o>)\(|(?<-o>)\))*\)(?(o)(?!))"

请参见

您不应该在层次结构中使用正则表达式(代码;XML等)。另请参见。用于解决此问题的正则表达式并非完全重复,尽管它确实解释了概念并提供了几乎完全正确的解决方案。如果您想删除此问题,请让我知道,我将删除我的答案。我想留下来回答这个问题。因为,我是c#的初学者,虽然我在这个课题上做了一些研究,但我无法解决这个问题。你的回答可以帮助像我这样的人。再次感谢..我很抱歉接受这个过程。我对这个平台了解不够。我希望现在成功是的,现在很好。我还添加了一个人类可读的模式描述。谢谢你的帮助。
var input = "X1 OR ( X2 AND( X3 AND X4 ) AND X5 ) OR X6";
var filtered = Regex.Replace(input, @"\((?>[^()]|(?<o>)\(|(?<-o>)\))*\)(?(o)(?!))", string.Empty);
var result = filtered.Split(new[] { ' ' }, 
    StringSplitOptions.RemoveEmptyEntries)
    .Where(element => element == "OR" || element == "AND");    
var temp = string.Join(" ", result);