C# 如何使用正则表达式获取重复组?

C# 如何使用正则表达式获取重复组?,c#,.net,regex,C#,.net,Regex,例如,我有以下字符串: Something`3[[typeOne],[typeTwo],[typeThree]][[typeOne],[typeTwo],[typeThree]] 其中可以包含N种类型: [[type1],...,[typeN]] Something`N[[type1],...,[typeN]] 我想提取这些内部typeX字符串(type1,…,typeN)。我使用这种模式(忽略空白-这只是为了可读性): 但它只给出最后一种类型(typeN)。如何使用正则表达式获取所有ty

例如,我有以下字符串:

Something`3[[typeOne],[typeTwo],[typeThree]][[typeOne],[typeTwo],[typeThree]]
其中可以包含N种类型:

[[type1],...,[typeN]]
Something`N[[type1],...,[typeN]]
我想提取这些内部
typeX
字符串(
type1
,…,
typeN
)。我使用这种模式(忽略空白-这只是为了可读性):

但它只给出最后一种类型(
typeN
)。如何使用正则表达式获取所有
typeX
字符串

编辑: 实际上,真正的问题是

Something`3[[typeOne],[typeTwo],[typeThree]]
其中可以包含N种类型:

[[type1],...,[typeN]]
Something`N[[type1],...,[typeN]]
我的正则表达式是:

(?:`(?<count>\d+)\[
   (?:,?\[([^]]+)\])+
\])
(?:`(?\d+)\[
(?:,?\[([^]]+)\])+
\])
对不起,我在中间改变了这个问题,我试图简化问题的输入,并且解决了先前的输入,但是不是这个输入…… 编辑2: 为了便于阅读,我似乎过度简化了我的问题。。。这是我的实际和全部要求:


你为什么不试试这个

(?:Something(?:`(\d+))?\[|(?<!^)\G)\[*([^\[\],\s]*)
(?:某物(?:`(\d+))\[\124;(?)?

不用担心使用regex,因为您可以在本地使用它

var str = "[[typeOne],[typeTwo],[typeThree]]";
var arr = str.Replace("[","").Replace("]","").Split(','); // easy-peasy

只需使用
\w+
:它在括号之间匹配列表中的所有元素。如果需要捕获,只需添加括号:
(\w+)

你可以试试这个。看演示


您的解决方案几乎就是这样,但我的问题有点复杂-请查看我的编辑…因此您希望仅在包含
某物编号的行上匹配
[
中的字符串。我是否正确?是的。我也想获得编号和前导的
某物,但编号和
[]
组可能会丢失,所以它都在一个组中(允许我将其设置为有条件的:它可以是
某物的2[[1],[2]
或者只是
某物
,例如,所以我想将其全部放在有条件的非捕获组中:
(?:…)?
请参见此处。从组1中获取计数和
[]
来自第2组。第2组可能包含空字符串。只需将其去掉即可。Ideone>似乎我问错了问题:-(你的答案是最好的,但我试图简化问题,这破坏了问题的含义…因此我问了另一个问题: