C# 在正则表达式中检索不同的值组
我有以下字符串:C# 在正则表达式中检索不同的值组,c#,.net,regex,recursion,C#,.net,Regex,Recursion,我有以下字符串: ((1+2)*(4+3)) 我希望通过一个正则表达式分别获得带括号的值。这些值必须位于类似字符串数组的数组中 例如: 第一组:((1+2)*(4+3)) 第2组:(1+2) 第3组:(4+3) 我试过这个正则表达式: (?<content>\(.+\)) (?\(.+\)) 但她不起作用,因为她保留了第一组 您将拥有允许我递归管理此问题的解决方案?您可以获得所有重叠的子字符串,这些子字符串以(开始,以结束)开头,并且使用 var result = Rege
((1+2)*(4+3))
我希望通过一个正则表达式分别获得带括号的值。这些值必须位于类似字符串数组的数组中
例如:
- 第一组:((1+2)*(4+3))
- 第2组:(1+2)
- 第3组:(4+3)
(?<content>\(.+\))
(?\(.+\))
但她不起作用,因为她保留了第一组
您将拥有允许我递归管理此问题的解决方案?您可以获得所有重叠的子字符串,这些子字符串以
(
开始,以结束)
开头,并且使用
var result = Regex.Matches(s, @"(?=(\((?>[^()]+|(?<o>)\(|(?<-o>)\))*(?(o)(?!)|)\)))").Cast<Match>().Select(x => x.Groups[1].Value);
输出:
((1+2)*(4+3))
(1+2)
(4+3)
如果有7层嵌套的括号呢?你应该递归地解析表达式,正则表达式不会帮你这么做。正则表达式不适合树表达式的反序列化考虑使用a将数学运算字符串转换为树来解决它如果你知道嵌套级别的数量(这里=1),你可以在C中这样做,类似于
\(\([^()]*\)\124;[^()]+)+\)
由于.NET允许您在量化的捕获组中迭代捕获的文本,您将获得所需的结果。您可以使用Regex.Matches(s,@)(?=(\(((?>[^()])+|(?)\(|(?)\)*(?(o)(?!)|)\)).Cast()。选择(x=>x.Groups[1]。Value)
((1+2)*(4+3))
(1+2)
(4+3)