用于从 CSV 中删除未转义引号的正则表达式

Regex to remove unescaped quotes from a CSV

我需要将 CSV 文件输入数据库。为此,我必须删除 "wild" 未转义的引号。

以下输入结构是可能的:

"aa";"bb";"cc";"dd";"ee"
"aa";"bb";"c "cc" c";"dd";"ee"
"aa";;"cc";"dd";"ee"
"aa";55;"cc";"dd";"ee" 

表达式:

(?<!^|\"\;)\"(?!\;|$)

对输入示例的 #1 和 #2 有效,但在存在空元素 (#3) 或未加引号的数字字段 (#4) 时失败。另见 this Rubular example

任何有关如何涵盖这些案例的指示都将不胜感激。

编辑:

听从@Wiktor Stribiżew 的建议,我现在正在使用

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

这也涵盖了一些额外的边缘情况,我在输入数据中已经确定,如图所示 here

以下解决方案仅能满足您当前的要求,并不是修复 CSV 中引号的通用解决方案:

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

替换为 </code>(或 <code>,具体取决于您使用此正则表达式的位置)。

参见regex demo

详情

  • (^"|"$|";+"|";\d+;") - 第 1 组:
    • ^"| - " 在字符串的开头,或
    • "$| - " 在字符串的末尾,或
    • ";+"| - ",1+ ; 个字符,然后是 ",或
    • ";\d+;" - ";, 1+ 位, 然后 ;"
  • | - 或
  • " - 一个 " 字符。