Замена с помощью re.sub ()
Нужно ввести массив значений в pattern из re.sub(pattern, repl, string) не знаю, как это можно реализовать пробовал вот так:
from re import sub
def filter_words(phrase):
for word in "bad|mean|ugly|horrible|hideous".split("|"):
if word in phrase.lower():
return sub(word,"awesome",phrase)
Пример работы кода: мы вводим строку "You said he was a bad dog." ---> "You said he was a awesome dog."
И аналогичная замена происходит со всеми словами из этой строки "bad|mean|ugly|horrible|hideous".
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
В регулярных выражения для поиска целых слов, их нужно оборачивать в \b.
В PATTERN_TEXT будет такой шаблон:
\bbad\b|\bmean\b|\bugly\b|\bhorrible\b|\bhideous\b
Пример:
import re
WORDS = "bad", "mean", "ugly", "horrible", "hideous"
PATTERN_TEXT = '|'.join(fr"\b{word}\b" for word in WORDS)
PATTERN = re.compile(PATTERN_TEXT, flags=re.IGNORECASE)
def filter_words(phrase):
return PATTERN.sub("awesome", phrase)
print(filter_words("You said he was a bad dog."))
# You said he was a awesome dog.
print(filter_words("You said he was a badass dog."))
# You said he was a badass dog.
Если нужно без полного совпадения по слову, то нужно убрать \b:
import re
WORDS = "bad", "mean", "ugly", "horrible", "hideous"
PATTERN = re.compile('|'.join(WORDS), flags=re.IGNORECASE)
def filter_words(phrase):
return PATTERN.sub("awesome", phrase)
print(filter_words("You said he was a bad dog."))
# You said he was a awesome dog.
print(filter_words("Go on Tony you, horribleish person!"))
# Go on Tony you, awesomeish person!