【问题标题】:I can not use regex to replace text contain "\" character [duplicate]我不能使用正则表达式替换包含“\”字符的文本[重复]
【发布时间】:2021-04-22 10:08:29
【问题描述】:

我有一个sn-p

public static void main(String[] args) {    
    // replacement text
    String replacement = "Not Set";
    // text
    String text = "Item A \\(XXX\\) Lock"; // text is "Item A\(XXX\)Lock"
    String regex = "\\(XXX\\)"; // regex is "\(XXX\)"
    // result text
    String resultText = text.replaceAll(regex, replacement);
    System.out.println("Result text: " + resultText);
}

resultText 是“Item A \(XXX\) Lock” -> 我无法将“\(XXX\)”替换为“Not Set”。

如果你知道这个问题,请帮助我。

【问题讨论】:

    标签: java regex replace replaceall regexp-replace


    【解决方案1】:

    字符\() 在正则表达式中使用时都有特殊含义。但是您不想使用它们具有特殊含义,这意味着您必须在正则表达式中对它们进行转义。这意味着在它们前面加上\,告诉正则表达式处理器不要调用这些字符的特殊含义。

    换句话说,一个包含\\的正则表达式将匹配一个包含\的正则表达式

    \( 将匹配 ( 等等。

    要匹配\(XXX\),您想要的正则表达式将是\\\(XXX\\\) - 看看您想要匹配的每个\() 是如何有一个额外的\。但是要在 Java String 文字中指定此正则表达式,您需要编写 \\ 来代替每个 \。也就是说,你需要写

    "\\\\\\(XXX\\\\\\)"。每一小段中都有六个\ 字符。

    String regex = "\\\\\\(XXX\\\\\\)"; 
    String resultText = text.replaceAll(regex, replacement);
    

    【讨论】:

    • 感谢您的支持。
    【解决方案2】:

    正则表达式语言在 Java 字符串文字转义序列之上有自己的转义序列。因此,要匹配反斜杠,您需要在正则表达式中使用 \\,因此在 Java 字符串文字中需要 \\\\

    在这种情况下,您也可以使用Pattern.quote

    text.replaceAll(Pattern.quote(regex), Matcher.quoteReplacement(replacement));
    

    【讨论】:

    • 感谢您的支持
    猜你喜欢
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多