C#正则表达式,用于在嵌套括号内匹配特定文本
我有以下代码行用于括号之间的take-to运算符: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 ==
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);