C# 用于解析复杂数组的正则表达式

C# 用于解析复杂数组的正则表达式,c#,arrays,regex,C#,Arrays,Regex,我正在尝试解析输入字符串,如下所示 array[数字或表达式或数组,数字或表达式或数组] 所以我需要在[,]中获取值。我试着用这个正则表达式得到他们: (array1)\[(.*)\,(.*)\] 获取(.*)捕获组的值,但它不起作用,因为它是贪婪的量词,因此在以下情况下: array1[ array2[4,3] , array2[1,6] ] 我将把array2[4,3],array2[1,作为第一个捕获组,而6作为第二个捕获组,这是不对的 如果输入字符串是array1[array2[1,

我正在尝试解析输入字符串,如下所示
array[数字或表达式或数组,数字或表达式或数组]
所以我需要在
[,]
中获取值。我试着用这个正则表达式得到他们:

(array1)\[(.*)\,(.*)\]
获取
(.*)
捕获组的值,但它不起作用,因为它是贪婪的量词,因此在以下情况下:

array1[ array2[4,3] , array2[1,6] ]
我将把
array2[4,3],array2[1,
作为第一个捕获组,而
6
作为第二个捕获组,这是不对的


如果输入字符串是
array1[array2[1,1],3],5+3]
,那么如何将
array2[4,3]
作为第一捕获组,将
array2[1,6]
作为第二捕获组?或者
array2[array3[1,1],3]
5+3
作为平衡组使用:

array\d*\[\s*((?:[^\[\]]|(?<o>\[)|(?<-o>\]))+(?(o)(?!))),\s*((?:[^\[\]]|(?<o>\[)|(?<-o>\]))+(?(o)(?!)))\]
array\d*\[\s*((?:[^\[\]])(?\[)(?\])+(?(o)(?!)),\s*((?:[^\[\]])(?\[)(?\[)(?\])+(?(o)(?!)\]
在你的最后一根弦上

分项数字:

array\d*\[\s*    # Match array with its number (if any), first '[' and any spaces
(
  (?:                 
    [^\[\]]      # Match all non-brackets
  |
    (?<o>\[)     # Match '[', and capture into 'o' (stands for open)
  |
    (?<-o>\])    # Match ']', and delete the 'o' capture
  )+
  (?(o)(?!))     # Fails if 'o' doesn't exist
)
,\s*             # Match comma and any spaces
(                # Repeat what was above...
  (?:            
    [^\[\]]      # Match all non-brackets
  |
    (?<o>\[)     # Match '[', and capture into 'o' (stands for open)
  |
    (?<-o>\])    # Match ']', and delete the 'o' capture
  )+
  (?(o)(?!))     # Fails if 'o' doesn't exist
)
\]               # Last closing brace
array\d*\[\s*#将数组与其编号(如果有)匹配,首先是“[”和任何空格
(
(?:                 
[^\[\]]匹配所有非括号
|
(?\[)#匹配“[”,并捕捉到“o”(表示开放)
|
(?\])匹配']',并删除'o'捕获
)+
(?(o)(?!)#如果“o”不存在,则失败
)
,\s*#匹配逗号和任何空格
(#重复上面的内容。。。
(?:            
[^\[\]]匹配所有非括号
|
(?\[)#匹配“[”,并捕捉到“o”(表示开放)
|
(?\])匹配']',并删除'o'捕获
)+
(?(o)(?!)#如果“o”不存在,则失败
)
\]#最后一个右括号

如果添加第三个数组,则此操作将失败。@rbrundritt只有一个数组(最多)有两个子数组(但可以有更多子数组)在这个问题上。我不知道你的意思是什么…?允许它处理任意数量的子数组不是更有意义吗。@rbrundritt那么就不需要捕获组了。OP只需要创建一个捕获组,其中包含在这种情况下由逗号分隔的所有子数组。@MaxDove我很高兴:)感谢您接受ans哇!