用于删除内部双引号的正则表达式

时间:2013-04-24 01:16:35

标签: java regex csv

我有一个外部双引号""的字符串。我需要删除内部双引号。什么是正则表达式?

例如:

  

输入:"你好,#34;我到达"今晚" --->输出:"你好,我   今晚到了#34;
  输入:"你好,#34;我今晚到了#34;" --->输出:   "你好,我今晚到了#34;
  输入:""你好"我今晚到了#34;   --->输出:"你好,我今晚到了#34;

我尝试了以下代码,但它不适用于我的示例2和3.它适用于示例1.

data.replaceAll("\"(\\b[^\"]+)?\"\\b([^\"]+)\\b\"([^\"]+\\b)?\"","\"$1$2$3\"");

背景:我有一个CSV文件,我需要解析它。数据在外部引号内带有内部引号。例如:

"aa","bb","cc","dd "REMOVE QUOTES" "
"aaa","bbb","ccc",""REMOVE QUOTES" ddd "

我希望Regexp只删除内部引号并保留外部引号。输出:

"aa","bb","cc","dd REMOVE QUOTES "
"aaa","bbb","ccc","REMOVE QUOTES ddd "

3 个答案:

答案 0 :(得分:2)

您可以使用负面后视和前瞻的组合:

data = data.replaceAll("(?<!^)\"(?!$)", "")
  • (?<!^)行开头的负面观察
  • (?!$) EOL
  • 的否定预测

答案 1 :(得分:1)

给它一个机会。我得到内部字符串(忽略外引号)然后删除所有引号并添加外部引号。

String input1 = "\"Hello there \"I arrive\" tonight\"";
String output1 = "\"" + input1.substring(1, input1.length() - 1).replaceAll("\"", "") + "\"";
System.out.println(output1);

输出继电器

  

“你好,我今晚到了”

答案 2 :(得分:0)

如果我认为你的字符串以第一个“并以最后一个结尾”开头,你可以使用它作为正则表达方式:

data.replaceAll("(?<!^)\"(?!$)", "");