删除引号内的文字

时间:2014-04-11 13:19:59

标签: java regex string replace

我想删除双引号或单引号或反引号中的字符串以及包含的字符。

输入是:

Lorem ipsum "'dolor sit amet consectetur'" adipiscing "elite"  ellentesque 

scelerisque 'tortor' tortor in `vestibulum` dolor

预期产出:

Lorem ipsum adipiscing ellentesque scelerisque tortor in dolor

我有这段代码,但结果没有变化。谁能告诉我我的代码有什么问题?

line.replaceAll("[\'\"\\`].*[\'\"\\`]$", "");

5 个答案:

答案 0 :(得分:3)

你的正则表达式存在三个问题。

  1. 它匹配"'`任何 "'`之一的文本,而不一定是开始匹配的文本。< / LI>
  2. *贪婪,这意味着它会匹配来自第一个"'`的文字到最后一个的文字这条线。
  3. 因为您的正则表达式以$结尾,所以只有当文本以整个字符串的结尾结束时才会匹配文本。
  4. 你可以这样试试:

    sb.append(line.replaceAll("(?:([\"'`])[^\\1]*?\\1)\\s+|\r?\n", ""));
    

    输入:

    Lorem ipsum "'dolor sit amet consectetur'" adipiscing "elite"  ellentesque 
    
    scelerisque 'tortor' tortor in `vestibulum` dolor
    

    输出:

    Lorem ipsum adipiscing ellentesque scelerisque tortor in dolor
    

    这里有正则表达式的解释和演示:http://regex101.com/r/iK3fQ8

答案 1 :(得分:1)

将贪婪的匹配器.*更改为.+?(非贪婪)。

并指定替换值。

完整代码:

line = line.replaceAll("([\'\"\\`]).+?\1", "");

感谢tobias_k指出我可以使用反向引用。

同时检查java的转义规则并相应地转义。

答案 2 :(得分:1)

像这样可能是:

\".*?\"|\'.*?\'|`.*`

演示:http://regex101.com/r/lB4xS2

答案 3 :(得分:1)

为了提高代码的可读性,我将其拆分为几个正则表达式:

line = line.replaceAll("\".*?\"", "");
line = line.replaceAll("'.*?'", "");
line = line.replaceAll("`.*?`", "");

(未经测试,可能需要另外一个代表性)

答案 4 :(得分:1)

l=line;
l=l.replaceAll("\"[^\"]+\"","");
l=l.replaceAll("'[^\"]+'","");
l=l.replaceAll("`[^\"]+`","");

解释

  1. " - 使用"
  2. 开始一个字符串
  3. [^"]+ - 找到至少一张不是"
  4. 的图表
  5. " - 找到结束"
  6. 同样的&#39;和`