相关疑难解决方法(0)

在java中使用RegEx解析CSV输入

我知道,现在我有两个问题.但我很开心!

我从这个建议开始不尝试拆分,而是匹配什么是可接受的字段,并从那里扩展到这个表达式.

final Pattern pattern = Pattern.compile("\"([^\"]*)\"|(?<=,|^)([^,]*)(?=,|$)");
Run Code Online (Sandbox Code Playgroud)

表达式看起来像没有恼人的转义引号:

"([^"]*)"|(?<=,|^)([^,]*)(?=,|$)
Run Code Online (Sandbox Code Playgroud)

这对我来说效果很好 - 或者它匹配"两个引号和它们之间的任何东西",或者"行开头或逗号和行尾或逗号之间的东西".通过匹配迭代可以获得所有字段,即使它们是空的.例如,

the quick, "brown, fox jumps", over, "the",,"lazy dog"
Run Code Online (Sandbox Code Playgroud)

分解成

the quick
"brown, fox jumps"
over
"the"

"lazy dog"
Run Code Online (Sandbox Code Playgroud)

大!现在我想删除引号,所以我添加了前瞻和后瞻性非捕获组,就像我为逗号做的那样.

final Pattern pattern = Pattern.compile("(?<=\")([^\"]*)(?=\")|(?<=,|^)([^,]*)(?=,|$)");
Run Code Online (Sandbox Code Playgroud)

再次表达的是:

(?<=")([^"]*)(?=")|(?<=,|^)([^,]*)(?=,|$)
Run Code Online (Sandbox Code Playgroud)

而不是期望的结果

the quick
brown, fox jumps
over
the

lazy dog
Run Code Online (Sandbox Code Playgroud)

现在我得到了这个细分:

the quick
"brown
 fox jumps"
,over,
"the"
,,
"lazy dog"
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

java regex csv

16
推荐指数
2
解决办法
3万
查看次数

标签 统计

csv ×1

java ×1

regex ×1