Заменить текст случайным словом из предложенных

пишу телеграм бота. В боте есть шаблоны, и я хочу добавить такую функцию, как случяайное слово при рассылке. То есть, человек пишет:

{Привет|Как дела} Это Ваня. Ну ладно {Пока|Прощай}

Подскажите, как сделать, что бы скрипт брал рандомные слова в скобках? Допустим так:

Привет Это Ваня. Ну ладно Прощай

Как дела Это Ваня. Ну ладно Прощай

Я пробовал использовать форматирование строк, но если пользователь введет больше 1й такой строки, то вылетит ошибка

Вот код:

import random


class RandomText(object):
    def __format__(self, format):
        return random.choice(format.split('|'))


print('fef fe efe {:Привет|Пока}'.format(RandomText()))

Ответы (1 шт):

Автор решения: Zhihar

чем не устраивает решение в лоб?

import random

text = f"{random.choice(['Привет', 'Как дела'])} Это Ваня. Ну ладно {random.choice(['Пока', 'Прощай'])}"
print(text)

ну или в вашем случае

text = f"{random.choice('Привет|Как дела'.split('|'))} Это Ваня. Ну ладно {random.choice('Пока|Прощай'.split('|'))}"

ну и можете конечно не в 1 строчку делать:

text1 = random.choice('Привет|Как дела'.split('|'))
text2 = random.choice('Пока|Прощай'.split('|'))
text = f"{text1} Это Ваня. Ну ладно {text2}"

P.S.

Понял наконец то ваш случай - вам нужны регулярные выражения

Принцип работы следующий:

  1. ищем все структуры вида {}

  2. затем последовательно парсим их, получаем случайное число и делаем замену

вот пример кода:

import re
import random

text = "Проверка {Ваня|Петя|Таня} работы {1|2|3|4|5} вского"

blocks = re.findall(r"\{(.*?)\}", text)

res = text
for block in blocks:
    value = random.choice(block.split('|'))
    res = re.sub(r"\{(.*?)\}", value, res, 1)

print(res)
→ Ссылка