替换字符串以与条件完全匹配

时间:2019-03-15 07:31:57

标签: java regex

示例字符串

  

astabD(tabD)tabD .tabD tabD。 (tabD tabD)

对于上述字符串中除第一个和第二个字符串之外的每个字符串,我都需要用temp.tabD之类的东西替换tabD。

为此,我尝试使用单词边界替换全部

  

str.replaceAll(“ \ b” +“ tabD” +“ \ b”,“ temp.tabD”))

有效,除了第二次出现。希望对您有所帮助,因为'('和')'也是关键字,只有两者的出现都必须忽略。

1 个答案:

答案 0 :(得分:2)

您可以使用

.replaceAll("\\b(?<!\\((?=\\w+\\)))tabD\\b", "")

或者,如果tabD来自用户输入:

String s = "astabD (tabD) tabD .tabD tabD. (tabD tabD)";
String word = "tabD";
String wordRx = Pattern.quote(word);
s = s.replaceAll("(?<!\\w)(?<!\\((?=" + wordRx + "\\)))" + wordRx + "(?!\\w)", "");

请参见regex demo

详细信息

  • \b-单词边界((?<!\w)是明确的左单词边界)
  • (?<!\((?=\w+\)))-如果在当前位置的正前方有一个(,其后跟1个以上的字符字符(\w+必须匹配{ {1}}一词)后跟tabD注意:如果您的IDE告诉您)位于后方,则是自{{1} }在此处处于前瞻性,并且+ / +量词在前瞻中被允许使用)
  • +-要查找的词
  • *-单词边界(tabD是明确的右单词边界)

Java demo

\b