【发布时间】:2014-11-26 20:50:40
【问题描述】:
在 Python 中,我有一系列带有未闭合标签的凌乱字符串。注意:这不需要像 NLP 解析器那样是正确的 XML。例如考虑以下字符串:
<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>
【问题讨论】:
-
你还有一个额外的
</TIMEX>,就在第一行的but之前... -
是的,我忘了添加那个。已更新。
-
Link。尝试这个。我看到了它的 HTML,但也许你可以处理自定义标签。
-
@juree,我最初是在看那个,但它似乎可以处理添加丢失的标签,而不是删除多余的标签。但是是的,BeautifulSoup 可以处理这些类型的自定义标签。
-
基于大多数许可解析器的工作方式,看到像
<hi>这样的开始标签,他们假设标签包含最大数量的后续节点。这与+和*正则表达式运算符的“贪婪”行为完全相同。在这种情况下,<hi>将包含您的整个文档,删除它会删除所有内容。可能不是你想要的。但这就是像BeautifulSoup和lxml.html这样的宽容解析器会给你的。
标签: python beautifulsoup lxml