java - 由空格和可选引号分隔的 csv 文件的正则表达式

标签 java regex csv

我有一个采用以下格式的 csv 文件:

22/09/2011 15:15:11 "AT45 - Km 2 +300   Foo " "PL - 0460" 70 096 123456_110922_151511_000001M.jpg 123456 "DBx 4U02" 428008 100 95 "AB123CD"
22/09/2011 15:15:16 "AT45 - Km 2 +300   Foo " "PL - 0460" 70 087 123456_110922_151516_000002M.jpg 123456 "DBx 4U02" 428008 100 95 "EF456GH"
22/09/2011 15:16:30 "AT45 - Km 2 +300   Foo " "PL - 0460" 70 079 123456_110922_151630_000005M.jpg 123456 "DBx 4U02" 428008 200 96 "LM789NP"

我需要一个正则表达式来正确分割每个值,例如第一行是:

22/09/2011
15:15:11
"AT45 - Km 2 +300   Foo "
"PL - 0460"
70 096 123456_110922_151511_000001M.jpg
123456
"DBx 4U02"
428008
100
95
"AB123CD"

我找到了这个正则表达式: ([^,"]+|"([^"]|)*") ,但它并不能很好地完成这项工作。

有人可以给我一个好的提示吗?

最佳答案

使用 CSV 解析器可以更好地处理此类任务。其中之一是 http://opencsv.sourceforge.net/,它允许我们指定您自己的分隔符(以及许多其他内容)。

String csv =
        "22/09/2011 15:15:11 \"AT45 - Km 2 +300   Foo \" \"PL - 0460\" 70 096 123456_110922_151511_000001M.jpg 123456 \"DBx 4U02\" 428008 100 95 \"AB123CD\"\n" +
        "22/09/2011 15:15:16 \"AT45 - Km 2 +300   Foo \" \"PL - 0460\" 70 087 123456_110922_151516_000002M.jpg 123456 \"DBx 4U02\" 428008 100 95 \"EF456GH\"\n" +
        "22/09/2011 15:16:30 \"AT45 - Km 2 +300   Foo \" \"PL - 0460\" 70 079 123456_110922_151630_000005M.jpg 123456 \"DBx 4U02\" 428008 200 96 \"LM789NP\"";

CSVParser parser = new CSVParserBuilder().withSeparator(' ').build();

CSVReader reader = new CSVReaderBuilder(new StringReader(csv))
        .withCSVParser(parser)
        .build();

for (String[] row : reader){
    for (String str : row){
        System.out.println(str);
    }
    System.out.println("----");
}

输出(至少是开头):

22/09/2011
15:15:11
AT45 - Km 2 +300   Foo 
PL - 0460
70
096
123456_110922_151511_000001M.jpg
123456
DBx 4U02
428008
100
95
AB123CD
----

关于java - 由空格和可选引号分隔的 csv 文件的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55577123/

相关文章:

java.lang.IllegalArgumentException : Non-positive maxBytesPerChar 异常

java - 如何将一个值赋给多个变量

javascript - 匹配标准和离群值输入的正则表达式

javascript - 如何使用 javascript/jquery 从 URL 中删除获取变量和文件名?

python - 将正则表达式传递给 python 的 csv 模块或 numpy 的 genfromtxt/loadtxt 中的定界符字段?

ruby-on-rails - ruby /Rails : Best way to loop through a csv and set flag when new person is found

c# - 使用 LINQ 查询巨大的 CSV 和 Excel

java - 返回唯一元素的数组

java - 正则表达式将匹配行包装在井号内但不包含前导空格

php - "^/page/(\d+)$"的 preg_match