RegEx - Java拆分命令解析Csv文件

时间:2010-07-29 09:43:27

标签: java regex csv split

我有以下格式的CSV

11000,Christopher,Nolan,MR.,Inception,25993,France,"Lefoullon,Paris",920,Director,*461-7755,33-461-7755,12175,"O'Horner, James",12300,"Glebova, Nathalie",,Christophe.Nolan@movies.com,Capital,NEW

Regarding Java Split Command Parsing Csv File

在此链接中@Mark Byers和@R。 Bemrose建议String[] tokens = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)", -1);但是如果您在上面的CSV中仔细注意,您会发现"O'Horner, James"的名称导致问题并导致ORA-0917: missing comma错误。有没有办法避免它或者必须纠正reg-ex?

有点困惑:-o

1 个答案:

答案 0 :(得分:2)

警告:以下所有内容都是闲置的猜测和猜测,因为您没有提供任何验证代码,而且我的palantir正在车间进行预防性维护。

思路:你没有遇到早期"Lefoullon,Paris"的问题,但你确实遇到"O'Horner, James"的问题...这表明撇号可能是(无辜的)原因问题。

假设:该字段已成功从CSV中提取为O'Horner, James ...请注意,撇号并非特殊于CSV(并且不会出现在那个华丽的[请参阅注释]正则表达式中)。

然而撇号对SQL很重要;撇号在SQL中引用字符串文字,数据中的撇号必须加倍。

像这样:INSERT INTO ..... VALUES(...,'O''Horner, James', ...);

如果在SQL接口中使用参数替换(应该如此),则将为您完成将数据字段转换为有效的SQL常量。否则

  • 编写代码来修复每个字符串字段(将每个'替换为'',然后将结果包装在'正面和背面)

  • google(“SQL注入”),使用参数替换读取,重复和重写代码


注:“华丽”,如“C'est magnifique,mais ce n'est pas la guerre”。为了理智,请使用CSV解析器。