Python - 删除未关闭的标签

时间:2014-11-26 20:50:40

标签: python beautifulsoup lxml

在Python中,我有一系列带有未闭合标签的杂乱字符串。注意:这不需要是适当的XML,因为它适用于NLP解析器。例如,考虑以下字符串:

<hi><TIMEX>every monday, wednesday and friday</TIMEX> </TIMEX>but <TIMEX>not saturday 
</TIMEX></bye><TIMEXUNTIL>until january</TIMEXUNTIL> from <TIMERANGE>11:30am-12:00
</TIMERANGE>

我们有一个额外的开放标签:

<hi>

额外结束标签:

</TIMEX>
</bye>

如何轻松删除任何不匹配的打开/关闭标签?我正在寻找的输出是:

<TIMEX>every monday, wednesday and friday</TIMEX> but <TIMEX>not saturday 
</TIMEX><TIMEXUNTIL>until january</TIMEXUNTIL> from <TIMERANGE>11:30am-12:00
</TIMERANGE>

1 个答案:

答案 0 :(得分:-2)

一种解决方案是迭代字符串,查找标签,包括已关闭和已打开的标签。

然后相应地放置逻辑。理想情况下,它可以通过堆栈数据结构来解决。可以使用以下逻辑编写代码。 -

  1. 让a成为标签,无论是打开还是关闭
  2. 检查标签是否在列表中,以相反的方式检查
  3. 如果您在列表中找到合适的标签并将其删除。如果没有,也添加该标签及其位置。适当的标签也可以定义为打开的一个或另一个开放标签的封闭标签,或者封闭标签的开放标签。
  4. 在迭代结束时,您将拥有未关闭/未打开的标签及其位置。现在你可以继续删除。