Regex для удаления неэкранированных цитат из CSV - PullRequest
1 голос
/ 19 марта 2020

Мне нужно подать файл 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+;"|";|;")|"

, это также охватывает некоторые дополнительные крайние случаи, которые я определил во входных данных, как показано здесь

1 Ответ

1 голос
/ 21 марта 2020

Следующее решение отвечает только вашим текущим требованиям и не является универсальным решением для исправления кавычек в CSV:

(^"|"$|";+"|";\d+;")|"

Замените на $1 (или \1, в зависимости от того, где вы используете это регулярное выражение ).

См. Демонстрационную версию regex .

Подробности

  • (^"|"$|";+"|";\d+;") - Группа 1:
    • ^"| - " в начале строки или
    • "$| - " в конце строки или
    • ";+"| - ", 1+ ; символов, а затем " или
    • ";\d+;" - ";, 1+ цифр, затем ;"
  • | - или
  • " - " char.
...