45 lines
1.8 KiB
Python
45 lines
1.8 KiB
Python
import re
|
||
|
||
|
||
def to_html(obj):
|
||
|
||
return str(obj).replace("<", "<").replace(">", ">")
|
||
|
||
|
||
def parse_links_to_inline_markup(message: str) -> list:
|
||
"""
|
||
Парсит сообщение с форматированными ссылками и возвращает список рядов кнопок.
|
||
|
||
Формат входного сообщения:
|
||
- [Текст кнопки + Ссылка] для одной кнопки.
|
||
- [Кнопка1 + Ссылка1][Кнопка2 + Ссылка2] для нескольких кнопок в одном ряду.
|
||
- Каждая строка представляет отдельный ряд кнопок.
|
||
|
||
Пример:
|
||
[Кнопка1 + https://example.com]
|
||
[Кнопка2 + https://example.org][Кнопка3 + https://example.net]
|
||
|
||
:param message: Строка с отформатированными ссылками.
|
||
:return: Список рядов кнопок, где каждый ряд — это список кортежей (Текст, Ссылка).
|
||
"""
|
||
# Исправленное регулярное выражение для поиска [Текст + Ссылка]
|
||
pattern = re.compile(r"\[([^\[\]+]+)\s*\+\s*(https?://[^\[\]]+)\]")
|
||
|
||
# Инициализируем список рядов кнопок
|
||
keyboard_rows = []
|
||
|
||
# Разбиваем сообщение на строки
|
||
lines = message.strip().split("\n")
|
||
|
||
for line in lines:
|
||
# Находим все совпадения в строке
|
||
matches = pattern.findall(line)
|
||
if matches:
|
||
row = []
|
||
for text, url in matches:
|
||
button = (text.strip(), url.strip())
|
||
row.append(button)
|
||
keyboard_rows.append(row)
|
||
|
||
return keyboard_rows
|