提问人:Tom 提问时间:3/20/2020 最后编辑:Tom 更新时间:3/22/2020 访问量:437
正则表达式从 CSV 中删除未转义的引号
Regex to remove unescaped quotes from a CSV
问:
我需要将 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) 或未加引号的数字字段 (#1) 时失败。另请参阅此 Rubular 示例
任何如何涵盖这些案件的指示将不胜感激。
编辑:
按照 @Wiktor Stribiżew 的建议,我现在正在使用
(^"|"$|";+"|";\d+;"|";|;")|"
这也涵盖了我在输入数据中确定的一些其他边缘情况,如下所示
答:
1赞
Wiktor Stribiżew
3/22/2020
#1
以下解决方案仅满足您当前的要求,不是在 CSV 中修复报价的通用解决方案:
(^"|"$|";+"|";\d+;")|"
替换为 (或 ,具体取决于使用此正则表达式的位置)。$1
\1
请参阅正则表达式演示。
详
(^"|"$|";+"|";\d+;")
- 第 1 组:^"|
-"
在字符串的开头,或者"$|
-"
在字符串的末尾,或者";+"|
-"
、1+ 个字符,然后 ,或者;
"
";\d+;"
-";
,则 1+ 位数字;"
|
-或"
- 一个字符。"
评论
(?<!\\)"
(^"|"$|";+"|";\d+;")|"
$1
\1