这是.NET的RegEx引擎中的错误吗?

时间:2013-10-10 02:50:09

标签: .net regex regex-lookarounds

我有两个正则表达式,用于Regex.Split

(?<=\G[^,],[^,],)

(?<=\G([^,],){2})

分割字符串"A,B,C,D,E,F,G,"时,第一个结果为:

A,B, 
C,D, 
E,F, 
G, 

,第二个结果是:

A,B, 
A, 
C,D, 
C, 
E,F, 
E, 
G, 

这里发生了什么?我认为(X){2}总是等同于XX,但我不确定了。在我的实际问题中,我需要做一些比较复杂的事情,而且我需要做六十九次,所以重复这个模式并不理想。

2 个答案:

答案 0 :(得分:5)

来自Regex.Split

的文档
  

如果在Regex.Split表达式中使用捕获括号,则任何捕获的文本都包含在结果字符串数组中。

内部括号正在捕获。请尝试使用(?:[^,],)

答案 1 :(得分:2)

来自docs

  

如果在Regex.Split表达式中使用捕获括号,则任何捕获的文本都包含在结果字符串数组中。

您的第二个表达式中有一个捕获组。尝试不捕获的parens:

(?<=\G(?:[^,],){2})