Вы можете использовать
.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 .
Подробности
\b
- граница слова ((?<!\w)
- однозначная левая граница слова) (?<!\((?=\w+\)))
- отрицательный взгляд сзадиэто не соответствует, если непосредственно перед текущим местоположением есть (
, за которым следуют 1+ слова (требуется \w+
, чтобы соответствовать tabD
слову) с последующим )
( ПРИМЕЧАНИЕ : Если ваша IDE сообщает вам, что +
находится внутри взгляда, это ошибка IDE, так как здесь +
находится в поле зрения, и квантификаторы +
/ *
разрешены в запросах) tabD
- слово для поиска \b
- граница слова ((?!\w)
- однозначная правая граница слова)
Демонстрация Java :
String s = "astabD (tabD) tabD .tabD tabD. (tabD tabD)";
System.out.println(s.replaceAll("\\b(?<!\\((?=\\w+\\)))tabD\\b", ""));
// => astabD (tabD) . . ( )