diff --git a/formatter.py b/formatter.py index d4b0ec6..6600adf 100644 --- a/formatter.py +++ b/formatter.py @@ -37,6 +37,7 @@ def replace_vk_links(text): Заменяет ссылки на сообщества ВК в форматах: [club123|Название сообщества] -> Название сообщества [id456|Имя пользователя] -> Имя пользователя + [текст](url) -> текст (для Telegram) [url|текст] -> текст (для Telegram) """ if not text: @@ -47,6 +48,27 @@ def replace_vk_links(text): vk_pattern = r'\[(?:club|id)\d+\|([^\]]+)\]' text = re.sub(vk_pattern, r'\1', text) + # Затем обрабатываем Markdown-ссылки [текст](url) и преобразуем их в HTML-ссылки + def replace_markdown_link(match): + link_text = match.group(1).strip() + url = match.group(2).strip() + + # Проверяем, что URL похож на ссылку (содержит http://, https://, или начинается с /) + # Это предотвращает обработку обычного текста в квадратных скобках как ссылки + if not (url.startswith('http://') or url.startswith('https://') or url.startswith('/') or url.startswith('#')): + # Если это не похоже на URL, возвращаем исходный текст без изменений + return match.group(0) + + # Экранируем кавычки в URL для безопасности + url = url.replace('"', '"') + # Экранируем HTML-сущности в тексте ссылки + link_text = link_text.replace('&', '&').replace('<', '<').replace('>', '>') + return f'{link_text}' + + # Регулярное выражение для поиска Markdown-ссылок формата [текст](url) + markdown_pattern = r'\[([^\]]+)\]\(([^\)]+)\)' + text = re.sub(markdown_pattern, replace_markdown_link, text) + # Затем обрабатываем ссылки формата [url|текст] и преобразуем их в HTML-ссылки def replace_url_link(match): url = match.group(1).strip()