【问题标题】:RegEx - Java Split Command Parsing Csv FileRegEx - 解析 Csv 文件的 Java 拆分命令
【发布时间】:2010-07-29 09:43:26
【问题描述】:

我有一个以下格式的 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 错误。有没有办法避免它或必须纠正正则表达式?

有点困惑:-o

【问题讨论】:

    标签: java regex csv split


    【解决方案1】:

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

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

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

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

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

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

    • 编写代码来修复每个字符串字段(将每次出现的' 替换为'',然后将结果前后包装在' 中)

    • google("SQL injection"),使用参数替换读取、改写和重写您的代码


    注意:“壮丽”如“C'est magnifique, mais ce n'est pas la guerre”。出于理智考虑,请使用 CSV 解析器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-15
      • 2012-09-08
      • 1970-01-01
      • 2015-10-26
      • 1970-01-01
      • 2018-06-16
      • 1970-01-01
      • 2018-11-04
      相关资源
      最近更新 更多