如何使用python sub删除<p> </ p>

top*_*ess 3 html python string

我有一个html文件,我想用空格替换空段落.

mystring = "This <p></p><p>is a test</p><p></p><p></p>"
result = mystring.sub("<p></p>" , "&nbsp;")
Run Code Online (Sandbox Code Playgroud)

这不起作用.

Eli*_*sky 10

不要尝试使用正则表达式解析HTML.使用正确的解析模块,htmlparser或者BeautifulSoup实现此目的."受苦"现在是一个短暂的学习曲线并受益:

  1. 您的解析代码将更加健壮,处理您可能没有考虑过的使用正则表达式失败的极端情况
  2. 对于未来的HTML解析/修改任务,您将有权更快地完成任务,因此最终时间投资也会得到回报.

你不会后悔的!保证利润!


Mar*_*air 5

我认为用一个真正的解析器给出一个如何做到这一点的例子总是很好的,并且只是重复Eli Bendersky在他的答案中给出的声音建议.

这是一个如何<p>使用lxml删除空元素的示例.lxml HTMLParser非常适合处理HTML.

from lxml import etree
from StringIO import StringIO

input = '''This <p> </p><p>is a test</p><p></p><p><b>Bye.</b></p>'''

parser = etree.HTMLParser()
tree = etree.parse(StringIO(input), parser)

for p in tree.xpath("//p"):
    if len(p):
        continue
    t = p.text
    if not (t and t.strip()):
        p.getparent().remove(p)

print etree.tostring(tree.getroot(), pretty_print=True)
Run Code Online (Sandbox Code Playgroud)

...产生输出:

<html>
  <body>
    <p>This </p>
    <p>is a test</p>
    <p>
      <b>Bye.</b>
    </p>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

请注意,我在回复此问题时误解了这个问题,而我只删除了空<p>元素,而不是替换它们&nbsp.使用lxml,我不确定一个简单的方法,所以我创建了另一个问题: