【问题标题】:RegEx for matching HTML tags用于匹配 HTML 标签的正则表达式
【发布时间】:2019-05-12 05:48:29
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

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

用于 h1-h6 标签的正则表达式 1

此链接可帮助您捕获不包括身体和头部的身体标签:

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

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

正则表达式电路

这个link 可以帮助你可视化你的表情:

头部和身体的正则表达式 2

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

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

性能

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

【讨论】:

  • 感谢艾玛的解释。我尝试了这些行,它们分别给了我开始标签、结束标签和空标签。
  • starttag = re.findall(r'[^/]?>',str2), endtag = re.findall(r'( \w+)>',str2), emptytag = re.findall(r'',str2) 这给了我 starttags=['body','h1'], endtags=['h1', 'body','html'], emptytag=['br'] for str2 = '

    网站


猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-29
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2019-10-06
  • 2011-12-15
相关资源
最近更新 更多