Регулярные выражения, и как их правильно использовать?
Моя задача получить сообщение в телеграмм, и прогнать его через фильтр. Нужно найти в сообщение комбинацию чисел формата 68362|9999999|1|3 Я знаю что в начале всегда 5 чисел, после так же всегда 7, дальше 1 и дальше так же 1 число.
Я реализовал такой код:
@client.on(events.NewMessage)
async def reaction(event):
chat = await client.get_input_entity(event.message.from_id.user_id)
message = event.message.message
filt = re.findall(r"\d{5}|\d{7}|\d{1}|\d{1}", message, flags=re.M)
if filt:
print(f"Комбинация поймана!\nДанные: {filt[0]}|{filt[1]}|{filt[2]}|{filt[3]}")
client.run_until_disconnected()
Но код ловит все сообщения где есть хоть какие то числа, будь то 122121212121121, код просто выведет мне чушь. Я не могу понять как правильно построить фильтр что бы ловить заданную комбинацию. Так же я пробовал реализовать вот так:
\d{5}\w\d{7}\w\d{1}\w\d{1}
Но все так же безуспешно
Ответы (2 шт):
Проблему решил изменив маленькую w на заглавную.
Получил такой фильтр: \d{5}\W\d{7}\W\d{1}\W\d{1}
работает без нареканий
Проблему можно решить просто экранировав спецсимвол "|", как сказано в комментариях.
import re
message = "68362|9999999|1|3"
#message = "68362999999913"
filt = re.findall(r"\d{5}\|\d{7}\|\d\|\d", message)
if filt:
print(f"Комбинация поймана!\nДанные: {filt[0]}")