Невозможно понять поведение Regex в CSharp - PullRequest
0 голосов
/ 30 января 2019

При работе со строкой я наткнулся на 2 строки, каждая из которых содержит 2 (в nos) запятых , .

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);
    }
}

В приведенном выше примере обе строки str1 и str2 состоят из 2 запятых, но с разными индексами.,(?=(?:[^""]*""[^""]*"")*(?![^""]*"")) разделяет 'str1' с длиной 1 и str2 с длиной 3.

Почему это происходит, может кто-нибудь объяснить?

Скрипка здесь

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...