无法了解CSharp中的正则表达式行为

时间:2019-01-30 11:38:48

标签: c# regex

在使用字符串时,我遇到了两个都包含2个逗号()的字符串。

using System;
using System.Text.RegularExpressions;

public class Program
{
    public static void Main()
    {
        Regex rexCsvSplitter = new Regex(@",(?=(?:[^""]*""[^""]*"")*(?![^""]*""))");
        string str1 = "\"\"|\"FAN100\"|\"\"|\"XXXXX XXXXX,XXX.\"|\"9999 XXXXXX,XXX XXXXX\"|\"\"|\"XXXXXXXXXXX\"|\"ON\"|\"X9X 9X9\"|\"XXX\"|\"99\"|\"XXX\"|\"999 999-9999\"|\"999 999-9999\"|\"XXXX XXXX\"|\"xxx@xxx.xxx\"|\"N\"|\"\"|\"0099\"|\"XXX\"|\"X\"|\"\"|\"\"";
        string str2 = "\"\"|\"FAN100\"|\"\"|\"XXXXX XXXXX,XXX.\"|\"XX XXXX 9999,XXXXXX XXXXXX \"\"X\"\"|\"\"|\"XXXXXX\"|\"ON\"|\"XXX XXX\"|\"XXX\"|\"99\"|\"XXX\"|\"999 999-9999\"|\"999 999-9999\"|\"XXXX XXXX\"|\"xxx@xxx.xxx\"|\"N\"|\"\"|\"0099\"|\"XXX\"|\"X\"|\"\"|\"\"";
        Console.WriteLine("Hello World: {0}, {1}",rexCsvSplitter.Split(str1).Length,rexCsvSplitter.Split(str2).Length);
    }
}

在上面的示例中,字符串str1str2都包含2个逗号,但索引不同。 ,(?=(?:[^""]*""[^""]*"")*(?![^""]*""))将长度为1的'str1'和长度为3的str2分开。

为什么会这样,有人可以解释吗?

Fiddle is here

谢谢。

0 个答案:

没有答案