При создании легковесного инструмента, который обнаруживает цензурное использование ненормативной лексики, я заметил, что обнаружить специальные символы в конце границы слова довольно сложно.
Используя набор строк, я строю слово OR. регулярное выражение границы:
import re
PHRASES = (
'sh\\*t', # easy
'sh\\*\\*', # difficult
'f\\*\\*k', # easy
'f\\*\\*\\*', # difficult
)
MATCHER = re.compile(
r"\b(%s)\b" % "|".join(PHRASES),
flags=re.IGNORECASE | re.UNICODE)
Проблема в том, что *
не может быть обнаружен рядом с границей слова \b
.
print(MATCHER.search('Well f*** you!')) # Fail - Does not find f***
print(MATCHER.search('Well f***!')) # Fail - Does not find f***
print(MATCHER.search('f***')) # Fail - Does not find f***
print(MATCHER.search('f*** this!')) # Fail - Does not find f***
print(MATCHER.search('secret code is 123f***')) # Pass - Should not match
print(MATCHER.search('f**k this!')) # Pass - Should find
Любые идеи по настройкеэто удобно для поддержки фраз, заканчивающихся специальными символами?