我正在尝试使用正则表达式提取给定HTML代码行中的开始标签。在接下来的几行中,我希望第一行仅获得“ body”和“ h1”作为开始标记,第二行中获得“ html”,“ head”和“ title”作为开始标记:
我已经尝试使用以下正则表达式执行此操作:
start_tags = re.findall(r'<(\w+)\s*.*?[^\/]>',line)
'<body data-modal-target class=\'3\'><h1>Website</h1><br /></body></html>'
'<html><head><title>HTML Parser - II</title></head>'
但是第一行的输出是:['body','h1','br'],但是由于排除了'/',所以我不希望捕获'br'。
第二行是['html','title'],而我希望也能抓住'head'。如果您让我知道我的代码的哪一部分是错误的,那将是一种感激之情?
答案 0 :(得分:0)
如果希望使用正则表达式,则可能需要逐步设计多个不同的表达式。您可能可以使用OR管道连接它们,但可能没有必要。
此链接可帮助您捕获身体标签,但身体和头部除外:
(<(.*)>(.*)</([^br][A-Za-z0-9]+)>)
您可能想为其添加更多边界。例如,您可以将(.*)
替换为字符列表[]
。
此link可帮助您形象化表情:
对于头部和身体标签,您可能想滑动新行,可能需要an expression similar to:
(<head>([\s\S]*)<\/head>)|(<body>([\s\S]*)</body>)
这些表达式非常昂贵,您可能想要简化它们,或者编写其他脚本来解析HTML,或者找到HTML解析器来这样做。