3

Я хотел бы манипулировать закрытым CSV-файлом, не открывая его с помощью кнопки в надстройке Excel. Я могу выполнить все шаги, но у меня возникла проблема с поиском регулярного выражения, которое могло бы выполнить это. (Есть несколько ответов на похожие вопросы в сети на различных досках объявлений, и ни один из них не работает по-настоящему.

Вот пример кода, с которым должно выглядеть решение:

Я пробовал несколько регулярных выражений, но, похоже, не нашел решения. Мои ближайшие попытки:

Я чувствую, что должна быть возможность сделать это. Любая помощь о том, где я иду не так?

1 ответ1

2

Вы можете сделать это в два прохода. Во-первых, заменить запятые без кавычек:

/(?!\B"[^"]*),(?![^"]*"\B)/\|/gm

Input                               Output
---------------------------------   ---------------------------------
aaa,bbb,ccc,"ddd,eee","fff,ggg"     aaa|bbb|ccc|"ddd,eee"|"fff,ggg"
"aaa,bbb",ccc,ddd,"eee,fff"         "aaa,bbb"|ccc|ddd|"eee,fff"
"aaa,bbb","ccc,ddd","eee,fff",ggg   "aaa,bbb"|"ccc,ddd"|"eee,fff"|ggg

Вот онлайн демо первого шага

Тогда простая замена «ничем» даст вам желаемый конечный результат:

/"//gm

Input                               Output
---------------------------------   ---------------------------------
aaa|bbb|ccc|"ddd,eee"|"fff,ggg"     aaa|bbb|ccc|ddd,eee|fff,ggg
"aaa,bbb"|ccc|ddd|"eee,fff"         aaa,bbb|ccc|ddd|eee,fff
"aaa,bbb"|"ccc,ddd"|"eee,fff"|ggg   aaa,bbb|ccc,ddd|eee,fff|ggg

А вот онлайн демо второго шага

Это основано на ответе о переполнении стека.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .