在java中使用RegEx解析CSV - 在单元格内转义双引号

时间:2012-11-29 22:44:44

标签: java regex csv

我正在寻找一个java正则表达式,它将逃脱excel单元格中的双引号。

我已经按照这个例子但需要对正则表达式进行另一次更改,以使其能够在其中一个单元格中转义双引号。

Parsing CSV input with a RegEx in java

private final Pattern pattern = Pattern.compile("\"([^\"]*)\"|(?<=,|^)([^,]*)(?=,|$)");

示例数据:

  

“A,B” “2”尺寸“ ”text1,text2,text3“

上面的正则表达式在2"处失败。

我希望输出如下。无论外部双引号是否存在都无关紧要。

“A,B”
“2”尺寸“
“text1,text2,text3”

2 个答案:

答案 0 :(得分:0)

虽然我同意,使用正则表达式来解析CVS并不是最好的方法,但是稍微好一些的模式是:

Pattern pattern = Pattern.compile("^\"([^\"]*)\",|,\"([^\"]*)\",|,\"([^\"]*)\"$|(?<=,|^)([^,]*)(?=,|$)");

这将仅在引号和逗号后终止单元格值,或者在命令和引号后启动它。

答案 1 :(得分:0)

正如F.J评论的那样,输入数据含糊不清。但是对于您的示例输入,您可以尝试

  • string.split("\",\"")获取String[]的方法。 在此之后,你得到一个包含3个元素的数组:
[
"A,B, 
2" size, 
text1,text2, text3"
]
  • 删除数组第一个元素的第一个字符(双引号)
  • 删除数组最后一个元素的最后一个字符(双引号)