我不能使用正则表达式来替换包含""字符的文本



我有一个片段

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);
}

结果文本是"项目 A \(XXX\) 锁定" -> 我无法将"\(XXX\)"替换为"未设置"。

如果您知道此问题,请帮助我。

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

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

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

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

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

(将匹配(依此类推。

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

"\\\(XXX\\\)". 每个小运行中有六个字符。

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

最新更新