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哇!