【发布时间】:2014-08-01 23:31:10
【问题描述】:
我们正在处理包含带有非闭合双引号条目的行的 csv 文件。这些会炸毁 csv 解析器,因此我正在尝试组合一个正则表达式来识别这些行,以便我们可以在尝试处理它们之前从文件中删除它们。
在以下示例中,csv 解析器到达第 2 行,并在尝试关闭标记之前包含直到第 3 行中第一个双引号的所有内容,然后因为“关闭”之后有非空白字符而爆炸下一个逗号前的双引号。
示例第 1 行,一些数据,“好行”,处理良好,快乐
示例第 2 行,一些数据,“坏行,处理不佳,不满意
示例第3行,一些数据,“好行”,在这里之前死了,不开心
我正在尝试做类似的事情:
.*,"[^(",)]*[\r\n]
这个想法是找到一个单行,其中任何内容都后跟 ," 没有 " 的实例,它在行结束之前跟随。
序列的否定虽然不起作用。这种事情是怎么做到的?
注意:
由于人们一直建议检查偶数个双引号,因此值得注意的是,单个双引号 csv 条目可能包含独立的双引号(例如 ...,"Measurement: 1' 2"",. ..)。
【问题讨论】:
-
您可以使用简单的报价计数器。如果你的 (counter % 2) == 0,你很好
-
那本来是不错的,但是是的,我将把它放在 Java 中。
-
这个 Fede 的问题是你可以在引用的字段中包含一个双引号(例如 ...,"Measurement: 1' 2"",...
-
这是一个真实的例子吗?所以唯一的 valid 结束引号后跟一个逗号(或行尾“?
-
^(?:".*?"(?=,|$),?|[^",]*(?=,|$),?)+$怎么样?它仅匹配您的案例中的有效字符串。 Demo.