Слишком много символов включено в попытку разбора файла CSV

Фон

Я пытаюсь проанализировать файл CSV с помощью регулярных выражений PCRE. То есть разбирая (или выделяя) различные "ячейки", доступные в CSV, чтобы затем поместить их в несколько хорошо организованный массив, содержащий все части, которые удалось разобрать в процессе анализа.

Следующее регулярное выражение - это то, что я придумал до сих пор:

/(?:;|^)(?:(?:"(?:(?!"(;|$)).)*)|(?:([^;]*)))/g

Я настоятельно рекомендую вам поместить это в тестер для регулярных выражений. Вот небольшое количество тестовых данных, которые должны в значительной степени соответствовать.

"There; \"be";"but; someone spoke";hence the young man;hence the son;"test;"

Эта проблема

Регулярному выражению удается извлечь правильное количество частей. Он предназначен для регулярного выражения для извлечения текста из каждой "ячейки", доступной в CSV (используйте CSV, предоставленный выше для справки). Это в некоторой степени.

Вот результат групп в регулярном выражении выше:

"There; \"be
;"but; someone spoke
hence the young man
hence the son
;"test;

Как мы можем ясно видеть, строки, которые "экранированы" с использованием двойных кавычек, включают в себя " внутри своей группы для матча, также выбирает "и иногда даже точка с запятой. Насколько я понимаю, группа для негативных взглядов не должна включать их.

Я, наверное, пропустил что-то очень важное здесь. Возможно, кто-то может указать мне правильное направление к исправлению.

Редактировать и потенциальное решение

Похоже, я мог бы решить это. В отличие от того, что я сказал выше, отрицательный взгляд в действительности не создает группу захвата, о которой я изначально думал. Таким образом, добавление еще одной группы в уравнение, кажется, позволяет разобрать сегменты, которые мне нужны.

/(?:;|^)(?:(?:"((?:(?!"(;|$)).)*))|(?:([^;]*)))/g

Однако я пока оставлю вопрос открытым и сам отвечу на него, если не получится другого ответа. Чтобы не основывать его на мнении, я бы поэтому еще раз спросил, может ли быть более эффективный способ с точки зрения скорости, чем та, в которой я использую выше.

0 ответов

Другие вопросы по тегам