Я пытаюсь настроить регулярное выражение для черного и белого списков, отмечая слова из черного списка и игнорируя слова из белого списка. Вот правила:
- Я хочу увидеть, существует ли во входной строке слово или фраза из черного списка.
- Слова черного списка должны совпадать независимо от того, где они появляются (полное слово или как подстрока).
- Слова из белого списка (т.е. слова, которые заведомо считаются допустимыми, даже если они содержат слова из черного списка) не подлежат сопоставлению, если они представляют собой только полные слова.
Черный список слов, которые я хочу найти и сопоставить, если они найдены: ЗАЙЧИК, САД, ДЫРА.
Внесите в белый список чистые слова, которые можно игнорировать, даже если они содержат слова из черного списка: ЦЕЛЫЙ, САДОВНИК.
Я сделал следующее регулярное выражение с использованием отрицательного просмотра назад: (BUNNY|GARDEN|HOLE)(?<!\bWHOLE\b|\bGARDENER\b)
Мой глупый пример строки: Вся эта дыра - сплошная ошибка садовода-агронома.
Я бы ожидал, что подойдут только следующие: дырявый сплошной агардер
Это в основном работает, поскольку целое не совпадает, но целое совпадает, и агардер также подходит. Тем не менее, Gardener совпадает, даже если он находится в белом списке. Что мне не хватает?
\b(BUNNY|GARDEN|HOLE)\b
- person Charlie Armstrong   schedule 02.02.2021