我有一个很大的CSV文件,正在用Java解析。 问题是,在某些标有“”的文本部分中,我有换行符。 我现在正在尝试删除“”部分中的所有换行符,但到目前为止未成功。
例如,我有以下CSV:
"Test Line wo line break"; "Test Line
with line break"
"Test Line2 wo line break"; "Test Line2
with line break"
结果应为:
"Test Line wo line break"; "Test Line with line break"
"Test Line2 wo line break"; "Test Line2 with line break"
到目前为止,我已经尝试了以下方法:
s.replaceAll("(\\w)*\r\n", "$1");
但是,不幸的是,这取代了所有换行符,也替换了行尾的换行符。
然后,我将双撇号添加到正则表达式中:
s.replaceAll("\"(\\w)*\r\n\"", "$1");
但是,不幸的是,没有任何东西可以替代。
您能帮我找出我在这里做错了什么吗?
预先感谢
答案 0 :(得分:2)
您可以使用简单的"[^"]*"
正则表达式来匹配双引号之间的所有子字符串,并使用之间删除所有的换行符
String s = "\"Test Line wo line break\"; \"Test Line \nwith line break\"\n\"Test Line2 wo line break\"; \"Test Line2 \nwith line break\"";
StringBuffer result = new StringBuffer();
Matcher m = Pattern.compile("\"[^\"]*\"").matcher(s);
while (m.find()) {
m.appendReplacement(result, m.group().replaceAll("\\R+", ""));
}
m.appendTail(result);
System.out.println(result.toString());
输出:
"Test Line wo line break"; "Test Line with line break"
"Test Line2 wo line break"; "Test Line2 with line break"
请参见Java demo online。
请注意,.replaceAll("\\R+", "")
找到1个或多个任何换行符序列,并仅从匹配的“” [^“] *”中删除它们。
答案 1 :(得分:0)
如果您可以避免,我不建议您自己解析CVS。通常,解析原始文本通常会变得很麻烦,因为您需要处理各种异常,例如,您很容易达到正则表达式不够用的地步,并且您需要能够解析上下文无关的语法。
库中有一些用于解析CSV的选项:CSV parsing in Java - working example..?