Замена невалидных html тэгов < и > на < и >

Рейтинг: 2Ответов: 1Опубликовано: 03.08.2023

при отправке сообщения в телеграм с помощью бота, используется форматировка html, что значит при попытке запихать <аргумент> будет ошибка, и нужно заменять эти стрелочки на &lt; и &gt; но писать их каждый раз в куче текста просто адский не удобно, я хотел бы попробовать сделать регулярку которая будет заменять такие штуки автоматический но не трогать валидные html тэги к примеру:

Пример Валидного тэга который не нужно заменять

<a href="tg://user?id=1">Bot</a>

Невалидный тэг который требует замены

<аргумент команды>

Невалидный тэг который требует замены

< вам в ту сторону >.<

Код который я пытался реализовать но ничего не вышло(

import re

def replace_invalid_tags(html_string):
    invalid_tag_pattern = r'<[^a-zA-Z/!?](.*?)>'
    fixed_html = re.sub(invalid_tag_pattern, r'&lt;\1&gt;', html_string)
    return fixed_html

html_string = '<a href="#">Link</a> <argument1> <argument2>'
fixed_html = replace_invalid_tags(html_string)
print(fixed_html)

Ответы

▲ 1Принят

Попробуйте библиотеку bleach. В ней есть возможность выбирать валидные тэги.

from bleach.sanitizer import Cleaner


html_test = '<h1><a href="#">Link</a> <argument1> <argument2><аргумент команды> < вам в ту сторону</h1>'

cleaner = Cleaner(tags=['h1', 'a'])
print(cleaner.clean(html_test))

------------------------------

 <h1><a href="#">Link</a> &lt;argument1&gt; &lt;argument2&gt;&lt;аргумент команды&gt; &lt; вам в ту сторону</h1>