我不能使用正则表达式替换包含“\”字符的文本[重复]
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 ++替换相同文本的正则表达式匹配加上附加字符