python:拆分未关闭的html标记

python:拆分未关闭的html标记,python,list,text,split,Python,List,Text,Split,我正在开发一个电报机器人。电报不允许发送太长的信息。我的机器人必须生成一个文本,如果文本太长,我会编写一个函数将其拆分为列表中的更多消息,以便我可以逐个发送它们。 我现在做的是: message = "" # random text with variable lenght max_chars_per_message = 4000 length_message = len(message) splitted_message_list = [] for i in range(0, length_m

我正在开发一个电报机器人。电报不允许发送太长的信息。我的机器人必须生成一个文本,如果文本太长,我会编写一个函数将其拆分为列表中的更多消息,以便我可以逐个发送它们。 我现在做的是:

message = "" # random text with variable lenght
max_chars_per_message = 4000
length_message = len(message)
splitted_message_list = []
for i in range(0, length_message, max_chars_per_message):
    splitted_message = [message[i:i+max_chars_per_message]]
    splitted_message_list.append(splitted_message)
它实际上工作得很好。我的问题是文本是否包含html标记。我希望该函数能够执行以下操作:每“max_chars_per_message”个字符分割消息,但如果消息以未关闭的html标记结束,则在标记开始之前分割消息,并将该部分转换为以下分割消息

例如: 错:

这是一条te|st消息

对:

这是一条|测试消息


支持和使用的HTML标记是

您考虑过使用正则表达式吗?我不是正则表达式专家,但这将是我最大的努力:

import re

string = 'this is a <b> test </b> message <b> another text </b>'
output = re.split(r'(<.+?>)', string)

还有,你考虑过当整个文本都在某个HTML标记内时会发生什么吗?@Brunodesshuilliers我实际上不知道如何检查结尾是否有一个未关闭的HTML标记,并将该部分翻译成以下消息。我想检查是否有任何标签也有封闭的部分,但在那之后,事情似乎相当复杂complex@Kendas这是一个我没有考虑的好问题,因为生成的文本包含很多短标记。但这是一个很好的观点,我想在这种情况下,它应该在消息结束之前关闭标记,并在下面消息的开头添加另一个start标记。顺便说一句,目前我没有必要实施这一点——如果“此处的某些文本”最终比max_chars_per_message长呢?)@91DarioDev我在官方文件中偶然发现。我不打算写一个有效的例子,所以我不知道它是否有效,但你可以看看它。至少可以创建某种嵌套表示,告诉您需要关闭哪些标记等等。不过,也有一些边缘案例没有简单的答案。例如,仅打开标记就比最大长度占用更多空间,但这也需要您自己来确定。
['this is a ', '<b>', ' test ', '</b>', ' message ', '<b>', ' vamo ', '</b>', '']
output = re.findall(r'>(.*?)<', string)
[' test ', ' message ', ' another text ']