我不能使用正则表达式替换包含“\”字符的文本[重复]

Posted

技术标签:

【中文标题】我不能使用正则表达式替换包含“\\”字符的文本[重复]【英文标题】: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”。

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

【问题讨论】:

【参考方案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));

【讨论】:

感谢您的支持

以上是关于我不能使用正则表达式替换包含“\”字符的文本[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Notepad ++替换相同文本的正则表达式匹配加上附加字符

如何使用正则表达式匹配或替换仅包含数值的密码

括号之间的Python正则表达式替换[重复]

求一个正则表达式: 以英文字母开头,只能包含英文字母、数字、下划线

用java 正则表达式 提取IP地址

vs 2012/2013 等工具中,使用正则表达式,查找替换