【问题标题】:Regular expression for removing inner double quotes去除内部双引号的正则表达式
【发布时间】:2013-04-17 09:39:12
【问题描述】:

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

例如:

输入:“你好,我今晚到了”---> 输出:“你好,我 今晚到”
输入:“你好,我今晚到了””---> 输出: “你好,我今晚到”
输入:““你好”我今晚到了” ---> 输出:“你好,我今晚到了”

我尝试了以下代码,但它不适用于我的示例 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 "

【问题讨论】:

    标签: java regex csv


    【解决方案1】:

    您可以结合使用消极的后视和前瞻:

    data = data.replaceAll("(?<!^)\"(?!$)", "")
    
    • (?&lt;!^) 行首负后视
    • (?!$) EOL 的负前瞻

    【讨论】:

    • 不,他尝试了一个非常复杂的正则表达式。我想知道为什么这么复杂:)
    • 我想阅读最后一段是值得的。我的立场是正确的。
    • 我刚试过,表达式去掉所有双引号"
    • 此表达式适用于所有原始引号。 CSV parser 更适合解析 CSV。
    【解决方案2】:

    试一试。我得到内部字符串(忽略外部引号),然后删除所有引号并添加外部引号。

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

    输出

    “你好,我今晚到”

    【讨论】:

    • 谢谢大家,数据字符串是这样的 CSV 行:"aa","bb","cc","dd "REMOVE QUOTES" " "aaa","bbb", "ccc","ddd"REMOVE QUOTES" " 等等。我想删除内引号并保留外引号
    【解决方案3】:

    如果我假设您的字符串以第一个 " 开头并以最后一个 " 结尾,您可以将其用于正则表达式:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-10
      • 1970-01-01
      • 1970-01-01
      • 2014-09-14
      • 1970-01-01
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      相关资源
      最近更新 更多