Заменить слова из списка на другие в тексте
Имеются тексты:
text1 = "Шла Саша по шоссе вместе с Машей"
text2 = "Сегодня погода должна быть плохой"
text3 = "Я хочу купить торты и печенье"
Есть два списка:
spisok1 = ["Саша", "Машей", "плохой", "торты"]
spisok2 = ["Вика", "Никой", "хорошей", "фрукты"]
Необходимо заменить во всех текстах слова из spisok1 на слова из spisok2, чтобы получить следующий вид текстов:
text1 = "Шла Вика по шоссе вместе с Никой"
text2 = "Сегодня погода должна быть хорошей"
text3 = "Я хочу купить фрукты и печенье"
Пыталась использовать следующий код, но не получаю нужного результата
import re
texts = [text1, text2, text3]
new_texts = []
for text in texts:
for word_number in range(0, len(spisok1)):
new_text = re.sub(spisok1[word_number]), spisok2[word_number], text)
new_texts.append(new_text)
print(new_texts)
Помогите, пожалуйста, с решением этой задачи
Ответы (3 шт):
Автор решения: dj1vs
→ Ссылка
Используй метод replace
Финальное решение будет выглядеть так:
text1 = "Шла Саша по шоссе вместе с Машей"
text2 = "Сегодня погода должна быть плохой"
text3 = "Я хочу купить торты и печенье"
spisok1 = ["Саша", "Машей", "плохой", "торты"]
spisok2 = ["Вика", "Никой", "хорошей", "фрукты"]
texts = [text1, text2, text3]
for text in texts:
for i in range(len(spisok1)):
text = text.replace(spisok1[i], spisok2[i])
print(text)
Автор решения: GrAnd
→ Ссылка
Регулярным выражением одним махом всю строчку:
_map = dict(zip(spisok1, spisok2))
regexp = "|".join(re.escape(k) for k in _map)
new_texts = [re.sub(regexp, lambda m: _map[m.group(0)], text) for text in texts]
Для упрощения поиска "старое слово"->"новое слово" два списка свёл в соответствующий словарь.
Автор решения: AndreyM
→ Ссылка
во внутреннем for замени строку
text = text.replace(spisok1[word_number]), spisok2[word_number])