示例字符串
astabD(tabD)tabD .tabD tabD。 (tabD tabD)
对于上述字符串中除第一个和第二个字符串之外的每个字符串,我都需要用temp.tabD
之类的东西替换tabD。
为此,我尝试使用单词边界替换全部
str.replaceAll(“ \ b” +“ tabD” +“ \ b”,“
temp.tabD
”))
有效,除了第二次出现。希望对您有所帮助,因为'('和')'也是关键字,只有两者的出现都必须忽略。
答案 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
是明确的右单词边界)\b