用正则表达式替换两个标签之间的所有内容

时间:2013-02-08 23:38:16

标签: python regex

如果我有一个xml标签,例如:

<tag>
    ... abunch of stuff inside here
</tag>

我如何删除内部的所有内容,包括标签本身?

我试过了re.sub('<tag>.+</tag>', '', string),但它没有用。我在这里做错了什么?

3 个答案:

答案 0 :(得分:5)

can't使用正则表达式解析XML。这是不可能的。许多人创造了似乎有效的正则表达式,然后一旦他们面对任何未预料到的东西就会中断。您确实需要使用XML解析器来执行此操作。

答案 1 :(得分:0)

你可以安全地做到吗?使用lxml违背了您对re的愿望,但您可能已经被其他人的评论所说服,使用re充满了危险。

import lxml.etree as etree

xml = """<root>
<item name="1"/>
<item name="2"/>
<tag>
    <nested>Will I die</nested>
    ... abunch of stuff inside here
</tag>
<another/>
</root>"""

root = etree.fromstring(xml)
for to_kill in root.xpath("//tag"):
    to_kill.getparent().remove(to_kill)

print etree.tostring(root,  pretty_print=True)

给出:

<root>
<item name="1"/>
<item name="2"/>
<another/>
</root>

答案 2 :(得分:-2)

我之前使用的是xml,但很久以前。我正在使用svgs,我正在处理编辑svgs。如果你想删除标签内的东西,我相信你应该在javascript或jquery中寻找你的答案。