java - 用空格和可选引号分隔的 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"
我找到了这个 regex: ([^,"]+|"([^"]|)*")
,但它并不能很好地完成这项工作。
有人可以给我一个好的提示吗?
解决方案
使用 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 - java - 如何在Java中优化以下代码,我必须得到两个非常长的二进制字符串的按位或?
- python - 无法使用 python 请求通过用户名和密码在 GitLab 中进行身份验证
- java - 将新文件添加到文件夹
- expressionengine - Expression Engine v4.3.8 认为它是“最新的!” 所以没有升级到 5.x 的选项
- git - Azure Devops 构建管道 - 单击一次应用程序发布版本控制策略
- sql - Oracle:查找具有特定权限的所有用户
- bash - 获取带有用户名密码的 url 的 http 响应代码
- python - 是否可以从下到上而不是从上到下将小部件添加到 kivy 中的网格布局
- ruby-on-rails - 如何在 Rails 中使用一个提交按钮实现多表单
- javascript - 使用 vuejs 时 for 循环出现问题