如何制作以下正则表达式:
<meta [^\>]*content\s*=\s*(["\'])(.*?)\1
如果名称标签是动态的?
名称标签是:
<meta *name="Generator"* ...
解决方案:
re.compile(r""" <meta name=\"{0}\" [^\>]*content\s*=\s*(["\'])(.*?)\1""".format(meclue), re.I)
不要尝试使用正则表达式解析 HTML。这是个坏主意。相反,请使用 HTML 解析器。lxml 有一个不错的:
import lxml.html
html_string = """<html>
<head>
<meta name="firstname" />
<meta name="secondname" />
<meta someotherattribute="nonsense" />
</head>
<body>
<p>Something in the body</p>
</body>
</html>"""
html_element = lxml.html.fromstring(html_string)
# get all the name attributes from all meta elements
meta_name_list = html_element.xpath("//meta/@name")
# print them out
for name in meta_name_list:
print name
输出:
firstname
secondname
如果您希望正则表达式将元标记与 name 属性匹配,应该这样做:
<meta name="[^"]*" />
我从你的正则表达式中怀疑你不想完全这样做。如果这不是您需要的,请提供一些您希望正则表达式匹配的示例字符串