Java:如何删除双引号之间的所有换行符

时间:2019-06-16 18:43:38

标签: java regex

我有一个很大的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");

但是,不幸的是,没有任何东西可以替代。

您能帮我找出我在这里做错了什么吗?

预先感谢

2 个答案:

答案 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..?