【问题标题】:Is this a bug in .NET's Regex.Split?这是 .NET 的 Regex.Split 中的错误吗?
【发布时间】:2013-10-17 15:37:02
【问题描述】:

我有两个正则表达式,用于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,但我不确定了。在我的实际问题中,我需要做一些更复杂的事情,我需要做六十九次,所以仅仅重复这个模式并不理想。

【问题讨论】:

    标签: .net regex regex-lookarounds


    【解决方案1】:

    来自Regex.Split的文档

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

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

    【讨论】:

    • 那个或者传入RegexOptions.ExplicitCapture
    • 啊,这实际上是一个很棒的功能。太糟糕了,它违反直觉和怪异。
    • @JohnGietzen 我应该注意到许多语言都有这个特点。
    • 我很少使用 Regex.Split,所以这对我来说是新的。
    【解决方案2】:

    来自docs

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

    您的第二个表达式中有一个捕获组。尝试非捕获括号:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-04
      • 2011-09-28
      • 2017-07-23
      • 2012-09-15
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多