Мне нужно подать файл CSV в базу данных. Для этого я должен удалить «дикие» неэкранированные кавычки.
Возможна следующая структура ввода:
"aa";"bb";"cc";"dd";"ee"
"aa";"bb";"c "cc" c";"dd";"ee"
"aa";;"cc";"dd";"ee"
"aa";55;"cc";"dd";"ee"
Выражение:
(?<!^|\"\;)\"(?!\;|$)
работает для # 1 и # 2 во входных примерах, но происходит сбой, когда есть пустой элемент (# 3) или поле без чисел c (# 4) без кавычек. Также см. этот пример Rubular
Любой указатель о том, как охватить эти случаи, будет высоко оценен.
Редактировать:
Следуя совету @Wiktor Stribiżew, я теперь использую
(^"|"$|";+"|";\d+;"|";|;")|"
, это также охватывает некоторые дополнительные крайние случаи, которые я определил во входных данных, как показано здесь