从行中删除双引号

时间:2013-11-18 03:17:42

标签: java regex

我有一个看起来像这样的字符串

  

“他说,”“什么?”“”

在整个文件中,实际上有更多这样的行,用逗号分隔。该行的输出应如下所示:

  

他说,“什么?!!”

我正在尝试使用此方法:

Pattern pattern = Pattern.compile("\\s*(\"[^\"]*\"|[^,]*)\\s*");
            Matcher matcher = pattern.matcher(line);
            while (matcher.find()) 
            {
                System.out.println(matcher.group(1));
                lines.add(matcher.group(1)); //adds each line to an arraylist
            }

然而,我得到的输出是:

He said,
What?

我很确定原因是我的正则表达式,因为所有这些都删除了所有的双引号。

3 个答案:

答案 0 :(得分:1)

为什么不使用String#replaceAll

line.replaceAll("\"", "");

答案 1 :(得分:1)

这是因为你的正则表达式匹配

"He said, "

然后

"What?"

然后

""

您真正想要的是删除一级的双引号。为此,您需要使用外观断言:

Pattern pattern = Pattern.compile("\\s*\"(?!\")[^\"]*(?<!\")\"\\s*");

答案 2 :(得分:0)

形成引用字符串的过程是:

  1. 转义(加倍)字符串
  2. 中的双引号
  3. 用双引号
  4. 包围生成的字符串

    以下代码只是颠倒了这个过程:

    首先删除外部双引号,然后取消内部双引号,然后拆分:

    public static void main(String[] args) {
        String input = "\"He said, \"\"What?\"\"\"";
        String[] out = input.replaceAll("^(\")|(\")$", "").replace("\"\"", "\"").split(", ");
        for (String o : out) {
            System.out.println(o);
        }
    }
    

    输出:

    He said
    "What?"