括号之间用逗号分组字符串

响应: 正则表达式查找包含在两个字符之间的字符串,同时排除分隔符

嗨,我正在寻找适用于我的字符串的正则表达式模式,包括括号:

[1,2,3,4,5] [abc,ef,g] [0,2,4b,y7]
可以是任何东西,包括单词,数字,非单词在一起或分开。

我希望通过\[(.*?)\]得到括号之间的组,但是什么是正则表达式模式,它将在括号和子组字符串之间用逗号分隔,以便结果可能跟随?

第1组:1,2,3,4,5
 第1组:1
 第2组:2
 第3组:3
 第4组:4
 第5组:5

第2组:abc,ef,g
 第1组:abc
 第2组:ef
 第3组:g

等..

谢谢您的帮助

我同意@Dav,你最好在每个方括号组上使用String.Split。

但是,您可以使用单个正则表达式提取所有数据:

 (?:\s*\[((.*?)(?:,(.+?))*)\])+ 

使用此表达式,您将必须处理每个组的所有捕获以获取所有数据。 例如,在字符串上运行以下代码:

 var regex = new Regex(@"(?:\s*\[((.*?)(?:,(.+?))*)\])+"); var match = regex.Match(@"[1,2,3,4,5] [abc,ef,g] [0,2,4b,y7]"); for (var i = 1; i < match.Groups.Count; i++) { var group = match.Groups[i]; Console.WriteLine("Group " + i); for (var j = 0; j < group.Captures.Count; j++) { var capture = group.Captures[j]; Console.WriteLine(" Capture " + j + ": " + capture.Value + " at " + capture.Index); } } 

这会产生以下输出:

第1组
  捕获0:1,2,3,4,5为1
  捕获1:abc,ef,g为13
  在24处捕获2:0,2,4b,y7
第2组
  在1处捕获0:1
  捕获1:abc在13
  在24处捕获2:0
第3组
  在3处捕获0:2
  在5点捕获1:3
  在7点捕获2:4
  在9点捕获3:5
  捕获4:ef在17
  在20处捕获5:g
  在26处捕获6:2
  在28处捕获7:4b
  捕获8:y7在31

第1组为您提供每个方括号组的值,第2组为您提供每个方括号组中匹配的第一个项目,第3组为您提供所有后续项目。 您必须查看捕获的索引以确定哪个项目属于每个方括号组。

这是使用CaptureCollections的另一个选项(在单个正则表达式中执行此操作的唯一方法)。 菲尔罗斯的回答在一场比赛中完成了所有这一切,这个比赛做了多场比赛。 这样,所有单项捕获都根据找到它们的括号对进行了正确分组。

 string s = @"[1,2,3,4,5] [abc,ef,g] [0,2,4b,y7] "; Regex r = new Regex(@"\[((?:([^,\[\]]+),?)*)\]"); int matchNum = 0; foreach (Match m in r.Matches(s)) { Console.WriteLine("Match {0}, Group 1: {1}", ++matchNum, m.Groups[1]); int captureNum = 0; foreach (Capture c in m.Groups[2].Captures) { Console.WriteLine(" Group 2, Capture {0}: {1}", ++captureNum, c); } } 

输出:

第1组,第1组:1,2,3,4,5
  第2组,捕获1:1
  第2组,捕获2:2
  第2组,捕获3:3
  第2组,捕获4:4
  第2组,捕获5:5
第2组,第1组:abc,ef,g
  第2组,捕获1:abc
  第2组,捕获2:ef
  第2组,捕获3:g
第3组,第1组:0,2,4b,y7
  第2组,捕获1:0
  第2组,捕获2:2
  第2组,捕获3:4b
  第2组,捕获4:y7

一旦你有了支架分隔的组,你最好在你的组上使用String.Split来拆分它们。

\[(.*?)\]会告诉你括号之间的内容,但如果添加:

 \[(?.*?)\] 

这将分配一个您可以参考的组。

编辑然后我将使用Phil的Reg Ex,因为我的上面显示了如何分配组。

我不认为你在一个正则表达式中可以做的事情。 您的数据似乎在括号之间有可变数量的逗号分隔条目,并且没有具有可变数量的捕获组的正则表达式。