Вы используете str.replace , из документации:
Return a copy of the string with all occurrences of substring old replaced by new
Здесь вхождение означает точное совпадение старой строки, тогда функция попытается заменить слово, окруженное пробелами, например ' book '
, которое отличается от ' BOOK '
, ' Book '
и ' book'
. Давайте рассмотрим несколько случаев, которые также не совпадают:
" book " == " BOOK " # False
" book " == " book" # False
" book " == " Book " # False
" book " == " bOok " # False
" book " == " book " # False
Одной из альтернатив является использование регулярного выражения, подобного этому:
import re
words = ["book", "rule"]
sentences = ["This book is amazing", "The not so good book", "OMG what a great BOOK", "One Book to rule them all",
"Just book."]
patterns = [re.compile(r"\b({})\b".format(word), re.IGNORECASE | re.UNICODE) for word in words]
replacements = ['<font color="Green">' + word + '</font>' for word in words]
for sentence in sentences:
result = sentence[:]
for pattern, replacement in zip(patterns, replacements):
result = pattern.sub(r'<font color="Green">\1</font>', result)
print(result)
выход
This <font color="Green">book</font> is amazing
The not so good <font color="Green">book</font>
OMG what a great <font color="Green">BOOK</font>
One <font color="Green">Book</font> to <font color="Green">rule</font> them all
Just <font color="Green">book</font>.