样品串


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


对于上述字符串中除第一个和第二个字符串之外的所有字符串,我都需要用temp.tabD代替tabD。

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


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


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

最佳答案

您可以使用

.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+的单词需要tabD)和一个) (注意:如果您的IDE告诉您+位于后向内部,则这是IDE错误,因为+在此处处于先行状态,并且允许+ / *限定词在前面)
tabD-要查找的单词
\b-单词边界((?!\w)是明确的右单词边界)


Java demo

String s = "astabD (tabD) tabD .tabD tabD. (tabD tabD)";
System.out.println(s.replaceAll("\\b(?<!\\((?=\\w+\\)))tabD\\b", ""));
// => astabD (tabD)  . . ( )

10-06 14:44