Заменить текст случайным словом из предложенных
пишу телеграм бота. В боте есть шаблоны, и я хочу добавить такую функцию, как случяайное слово при рассылке. То есть, человек пишет:
{Привет|Как дела} Это Ваня. Ну ладно {Пока|Прощай}
Подскажите, как сделать, что бы скрипт брал рандомные слова в скобках? Допустим так:
Привет Это Ваня. Ну ладно Прощай
Как дела Это Ваня. Ну ладно Прощай
Я пробовал использовать форматирование строк, но если пользователь введет больше 1й такой строки, то вылетит ошибка
Вот код:
import random
class RandomText(object):
def __format__(self, format):
return random.choice(format.split('|'))
print('fef fe efe {:Привет|Пока}'.format(RandomText()))
Ответы (1 шт):
чем не устраивает решение в лоб?
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.
Понял наконец то ваш случай - вам нужны регулярные выражения
Принцип работы следующий:
ищем все структуры вида
{}затем последовательно парсим их, получаем случайное число и делаем замену
вот пример кода:
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)