Расследование вашего выражения
(,"|^")
(""|[\w\W]*?)
(?=",|"$)
|
(,(?!")|^(?!"))
([^,]*?|)
(?=$|,)
(,"|^")(""|[\w\W]*?)(?=",|"$)
Эта часть предназначена для соответствия строк в кавычках, которые, кажется, вам подходят
Пройдя через эту часть (,(?!")|^(?!"))([^,]*?|)(?=$|,)
(,(?!")|^(?!"))
начинаются с запятой, за которой не следует «ИЛИ начало строки, за которой не следует»
([^,]*?|)
Начало строки или ноль запятой или более, не жадные и |, почему |
(?=$|,)
конец строки или,.
В CSV эта строка ,,,3,4,5
должна дать 6 совпадений, но приведенное выше получает только 5
. Вы можете добавить (^(?=,))
в начале второй части, той части, которая соответствует разделам без кавычек.
Вторая группа с начальным совпадением, а также добавленный не захват в группы
(?:^(?=,))|(?:,(?!")|^(?!"))(?:[^,]*?)(?=$|,)
Завершено: (?:,"|^")(?:""|[\w\W]*?)(?=",|"$)|(?:^(?=,))|(?:,(?!")|^(?!"))(?:[^,]*?)(?=$|,)
Вот еще одна, которая может работать
(?:(?:"(?:[^"]|"")*"|(?<=,)[^,]*(?=,))|^[^,]+|^(?=,)|[^,]+$|(?<=,)$)
Как это работает, я описал здесь: Создание парсера CSV с использованием регулярных выражений