用java中的正则表达式解析CSV-单元格中的转义双引号

用java中的正则表达式解析CSV-单元格中的转义双引号,java,regex,csv,Java,Regex,Csv,我正在寻找一个java正则表达式,它将在excel单元格中转义双引号 我遵循了这个示例,但需要对正则表达式进行另一个更改,以使其能够在一个单元格中转义双引号 private final Pattern=Pattern.compile(“\”([^\“]*)\”|)(?虽然我同意,使用正则表达式解析CVS并不是最好的方法,但稍微好一点的模式是: Pattern pattern = Pattern.compile("^\"([^\"]*)\",|,\"([^\"]*)\",|,\"([^\"]*)

我正在寻找一个java正则表达式,它将在excel单元格中转义双引号

我遵循了这个示例,但需要对正则表达式进行另一个更改,以使其能够在一个单元格中转义双引号


private final Pattern=Pattern.compile(“\”([^\“]*)\”|)(?虽然我同意,使用正则表达式解析CVS并不是最好的方法,但稍微好一点的模式是:

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

Pattern Pattern=Pattern.compile(“^\”([^\“]*)\”、|、\“([^\“]*)\”、|、\”([^\“]*)\“$|”(?以及F.J注释,输入数据是不明确的。但是对于示例输入,您可以尝试

  • string.split(“\”,\”)
    方法获取
    string[]
    。 在此之后,将得到一个包含3个元素的数组:
  • 删除数组第一个元素的第一个字符(双引号)
  • 删除数组最后一个元素的最后一个字符(双引号)

好吧,你希望输出是什么?你到底为什么要用正则表达式解析csv?我可以看到,一旦你通过传统方法获得了这些令牌,就可以在单个令牌上使用正则表达式,但用正则表达式解析整个csv只是一个糟糕的主意。如果我正在对此进行代码审查,我会告诉你重写整个内容。你为什么要这样做使用regex来执行此操作,而不是类似于?您的输入数据是不明确的,如果您使用双引号作为分隔符,则不可能设计一个能够正确处理所有情况的regex或CSV解决方案,并且还可以在字段中包含未加修饰的双引号。例如
“foo”,“bar”
可以是
foo
bar
字段,也可以是一个包含
foo”、“bar
@user1864665内容的字段,您需要处理生成该数据的任何内容,以便转义字段中的任何双引号。您的数据应该是这样的:
“A,B”,“2\”大小”,“text1,text2,text3“
。如果你能做到这一点,那么CSV是你最好的选择,正则表达式是可能的(但很复杂)。谢谢你的正则表达式。实际上,当csv在excel中打开并用修改后的数据保存时,单元格周围的双引号消失了。如果单元格中有逗号,它会保留双引号。因此,在这种情况下,我的数据将变为“a,B”,2“大小”,text1,text2,text3”,text4,text5,text6,text7(为了更好地理解,我又增加了三列)。文本中的双引号如何?这些是否以任何方式转义?不,单元格中的双引号不会转义。:(我可以用另一个双引号转义双引号。例如,2“将是2”。我应该如何更改原始帖子中的正则表达式以忽略单元格中转义的双引号?您的模式可能匹配某个字符串,但无法更改它。因此,双引号删除应在匹配后完成。如果您喜欢,请接受整个答案。
Pattern pattern = Pattern.compile("^\"([^\"]*)\",|,\"([^\"]*)\",|,\"([^\"]*)\"$|(?<=,|^)([^,]*)(?=,|$)");
[
"A,B, 
2" size, 
text1,text2, text3"
]