2012-11-29 27 views
2

我正在寻找一个java正则表达式,它将在excel单元格内跳过双引号。用java中的RegEx解析CSV - 单元格内的转义双引号

我跟着这个例子,但需要正则表达式的另一个改变,以使其工作在一个单元格内转义双引号。

Parsing CSV input with a RegEx in java

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

实施例的数据:

“A,B” “2” 大小” “文本1,文本2,text3” 中

从上面的正则表达式失败,在2"

我想要输出如下。不要紧,如果外面的双引号是否存在。

“A,B”
“2” 大小”
“文本1,文本2,文字3”

+0

那么,你想要输出是什么? –

+0

为什么你会用RegEx解析csv?一旦你通过常规方式获得了这些标记,我就可以看到在个别标记上使用RegEx,但用RegEx解析整个csv只是一个可怕的想法。如果我正在对此进行代码审查,我会告诉你重写整个事情。 – evanmcdonnal

+2

你为什么要用正则表达式来代替[OpenCSV](http://opencsv.sourceforge.net)? – jlordo

回答

0

虽然我同意,在使用正则表达式解析CVS是不是真的是最好的方式,稍微好一点模式是:。

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

这只会报价和逗号之后终止单元格值,或一个命令和一个报价之后启动它

+0

感谢您的正则表达式。实际上,当csv在excel中打开并用修改后的数据保存时,围绕单元格的双引号就消失了。如果单元格中有逗号,则保留双引号。所以,在这种情况下,我的数据变成了“A,B”,2“大小,”text1,text2,text3“,text4,text5,”text6,text7“(为了更好理解,我增加了三列) – user1864665

+0

文本中的双引号是什么?这些是以任何方式逃脱的? – eppesuig

+0

不,一个单元格内的双引号不会被溢出:( – user1864665

0

以及FJ评论的,所述输入数据是不明确的,但为你的示例输入,你可以尝试

  • string.split("\",\"")方法得到一个String[]。 在此之后,你有与3个元素的数组:
[ 
"A,B, 
2" size, 
text1,text2, text3" 
] 
  • 去除第一字符(它是双引号)阵列的第一个元素的
  • 删除最后一个字符(这是双引号)的阵列的最后一个元素