匹配python中的html标签

Clé*_*ent 1 python regex xml xpath

我正在编写一个python片段来修复HTML代码中标题的大小.到目前为止,我已经提出了这个代码:

pattern = re.compile("<h1>(.*)</h1>|<h2>(.*)</h2>|<h3>(.*)</h3>|<h4>(.*)</h4>|<h5>(.*)</h5>|<h6>(.*)</h6>")

def replace(m):
    contents = m.group(1)
    replacement = contents[0] + contents[1:].lower()
    return replacement
Run Code Online (Sandbox Code Playgroud)

然后,给定a line,我使用的转换是line = pattern.sub(replace, line).

这不起作用,因为m.group(1)总是None,而我希望它是与我的正则表达式中的任何子句相对应的匹配.由于模式不能在python中共享一个名字,我有点不知所措.

一个显而易见的解决方案是将我使用的所有模式分组,但随后<h1>bla</h2>会被识别.这不好,因为<h1><a href="...">Bla</a></h1> <h2>Bla</h2>应该产生两个匹配(<a href="...">Bla</a>,和<a href="...">Bla</a>)

想法?

zee*_*kay 5

根据我的理解,你只想把所有的标题都资本化.您可以使用lxml哪个会使这个相当轻松:

import lxml.html

doc = lxml.html.parse(your_html)
for i in range(1,7):
    for h in doc.xpath('//h%d' % i):
        h.text = h.text.capitalize()

print lxml.html.tostring(doc)
Run Code Online (Sandbox Code Playgroud)