【问题标题】:python: split a sting translating unclosed html tagspython:拆分一个翻译未关闭的html标签的刺痛
【发布时间】:2017-08-23 14:21:12
【问题描述】:

我正在开发一个电报机器人。电报不允许发送太长的消息。我的机器人必须生成一个文本,如果它太长,我编写了一个函数将它拆分为列表中的更多消息,这样我就可以一个一个地发送它们。 我目前做的是:

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 标签结尾,则在标签开始之前拆分消息并将该部分转换为以下拆分消息.

示例: 错误:

this is a <b> te|st </b> message

右:

this is a |<b> test </b> message

支持和使用的 HTML 标签是here

【问题讨论】:

  • 另外,您是否考虑过当整个文本位于某个 HTML 标记内时会发生什么?
  • @brunodesthuilliers 我实际上不知道如何检查最后是否有未关闭的 html 标记并将该部分转换为以下消息。我在想检查是否有任何标签也有封闭的部分,但在那之后事情似乎很复杂
  • @Kendas 这是一个我没有考虑过的好点,因为生成的文本包含很多短标签。但这是一个很好的观点,我想在这种情况下,它应该在消息结束之前关闭标签,并在以下消息的开头添加另一个 start 标签。顺便说一句,目前我没有必要实现这个
  • 如果“some text here”最终比 max_chars_per_message 长怎么办?-)
  • @91DarioDev 我在官方文档中偶然发现了HTMLParser。我不打算写一个有效的例子,所以我不知道它是否有效,但你可以看看它。至少您可以创建某种嵌套表示,它会告诉您需要关闭哪些标签等等。不过会有一些个边缘案例,但没有简单的答案。就像单独的开始标签占用的空间超过最大长度一样,但这也需要您自己弄清楚。

标签: python list text split


【解决方案1】:

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

import re

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

输出:

['this is a ', '<b>', ' test ', '</b>', ' message ', '<b>', ' vamo ', '</b>', '']

如果您想删除 html 并仅列出文本:

output = re.findall(r'>(.*?)<', string)

输出:

[' test ', ' message ', ' another text ']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-11
    • 2013-04-08
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    相关资源
    最近更新 更多