如何使用正则表达式重复组?

时间:2014-10-07 10:10:20

标签: c# .net regex

我有这个字符串,例如:

Something`3[[typeOne],[typeTwo],[typeThree]][[typeOne],[typeTwo],[typeThree]]

其中可以包含N种类型:

[[type1],...,[typeN]]

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

\[
   (?:,?\[
      ([^\]]*)
   \])+
\]

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

编辑:

实际上,真正的问题是

Something`3[[typeOne],[typeTwo],[typeThree]]

其中可以包含N种类型:

Something`N[[type1],...,[typeN]]

我的正则表达是:

(?:`(?<count>\d+)\[
   (?:,?\[([^]]+)\])+
\])

很抱歉在中间更改问题,我尝试简化问题的输入,而some solution below (Avinash Raj)确实解决了先前的输入,但不是这个......

编辑2:

为了便于阅读,我似乎过分简化了我的问题......这是我的实际要求:

How to get repeating groups that nest within another group with regex?

4 个答案:

答案 0 :(得分:1)

为什么不试试这个?

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

DEMO

答案 1 :(得分:0)

当你可以本地使用正则表达式时,不要担心使用正则表达式。

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

DEMO

答案 2 :(得分:0)

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

答案 3 :(得分:0)

^.*?(\d+)|^.*?\[|\]$|\[(\w+)\]

你可以尝试一下。参见演示。

http://regex101.com/r/hQ1rP0/37