【问题标题】:How to replace special character }} in a string with "" using regexp in java如何在java中使用正则表达式用“”替换字符串中的特殊字符}}
【发布时间】:2021-10-24 23:46:26
【问题描述】:

我正在尝试使用 Java 中的正则表达式将字符串中的特殊字符 }} 替换为“”,我厌倦了以下两种方法,但它不起作用。请让我知道这些陈述有什么问题。

请注意,该字符串还将包含我想保留的}。目标是只替换}}

方法一:

    String buffer = obj.toJSONString() + ",";
    String result = buffer.replaceAll(Pattern.quote("(?<![\\w\\d])}}(?![\\w\\d])"), "");

方法二:

Pattern.compile("(?<![\\w\\d])}}(?![\\w\\d])").matcher(buffer).replaceAll("");

【问题讨论】:

  • 原来是you don't need to quote }s。我猜是上下文查找不起作用。当然在方法一中使用Pattern.quote仍然是错误的。

标签: java regex string


【解决方案1】:

下面的quote

  String result = buffer.replaceAll(Pattern.quote("(?<![\\w\\d])}}(?![\\w\\d])"), "");

表示将正则表达式视为文字字符串。错了。

如果您只是想删除所有 }} 而与上下文无关:

  String result = buffer.replaceAll(Pattern.quote("}}"), "");

如果您确实需要尊重上下文,请不要Pattern.quote(...) 正则表达式!

另一个问题是您尝试指定字符类的方式。由于\d\w 的子集,因此没有必要将它们组合起来。只需这样做:

  String result = buffer.replaceAll("(?<!\\w)\\}\\}(?!\\w)"), "");

我不确定是否严格需要引用} 字符,但如果没有必要,它是无害的。

【讨论】:

    【解决方案2】:

    不要使用Pattern.quote,使用文字正则表达式模式,并转义括号:

    Stringbuffer = obj.toJSONString() + ",";
    String result = buffer.replaceAll("(?<![\\w\\d])\\}\\}(?![\\w\\d])", "");
    

    使用Pattern.quote 告诉正则表达式引擎将字符串视为文字。这确实意味着括号不必被转义,但它也会将您的外观呈现为文字文本,可能不是您的想法。

    【讨论】:

      【解决方案3】:

      方法2还是需要转义特殊字符}

      Pattern.compile("(?<![\\w\\d])\\}\\}(?![\\w\\d])").matcher(buffer).replaceAll("");
      

      【讨论】:

        【解决方案4】:

        您能否尝试使用 Apache StringUtils。它更快,应该适用于您的情况。请找到以下链接以供参考。

        1. apache-stringutils-vs-java-implementation-of-replace

        2. Apache StringUtils 3.6

        【讨论】:

        • 1) 如果替换需要是上下文相关的(正如 OP 的正则表达式所暗示的那样!!),那么 StringUtils 不是解决方案。 2)添加额外的依赖可能是一个问题。尤其是在性能不是重要问题的情况下。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-14
        • 2014-05-05
        • 1970-01-01
        相关资源
        最近更新 更多