RegEx用于匹配HTML标签

时间:2019-05-12 05:48:30

标签: regex tags extract regex-group regex-greedy

我正在尝试使用正则表达式提取给定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'。如果您让我知道我的代码的哪一部分是错误的,那将是一种感激之情?

1 个答案:

答案 0 :(得分:0)

如果希望使用正则表达式,则可能需要逐步设计多个不同的表达式。您可能可以使用OR管道连接它们,但可能没有必要。

用于h1-h6标签的RegEx 1

此链接可帮助您捕获身体标签,但身体和头部除外:

(<(.*)>(.*)</([^br][A-Za-z0-9]+)>)

您可能想为其添加更多边界。例如,您可以将(.*)替换为字符列表[]

enter image description here

RegEx电路

link可帮助您形象化表情:

enter image description here

RegEx 2用于头部和身体

对于头部和身体标签,您可能想滑动新行,可能需要an expression similar to

(<head>([\s\S]*)<\/head>)|(<body>([\s\S]*)</body>)

enter image description here

性能

这些表达式非常昂贵,您可能想要简化它们,或者编写其他脚本来解析HTML,或者找到HTML解析器来这样做。