我正在编写一个 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
然后,给定一个 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>
)
想法?
最佳答案
据我了解,您只想将所有标题都大写。您可以使用 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)
关于python - 在python中匹配html标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6633491/