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>似乎我问错了问题:-(你的答案是最好的,但我试图简化问题,这破坏了问题的含义…因此我问了另一个问题: