Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在正则表达式中检索不同的值组_C#_.net_Regex_Recursion - Fatal编程技术网

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)