119人参与 • 2026-09-24 • 网页播放器
在 web 开发和数据采集工作中,经常需要从 html 页面中提取信息。虽然 html 解析库(如 beautifulsoup、jsoup、htmlagilitypack 等)是更稳妥的选择,但在某些轻量场景下,使用正则表达式解析 html 仍然是一种快速、直接的方案。本文将从基础概念出发,介绍如何使用正则表达式解析 html,并给出常见场景的实用示例。
在开始解析 html 之前,先回顾几个常用的正则表达式语法元素:
[a-z] 匹配任意小写字母,[0-9] 匹配任意数字。* 表示零次或多次,+ 表示一次或多次,? 表示零次或一次。() 捕获匹配的子串。?,如 .*?,表示尽可能少地匹配字符。\. 匹配点号,\/ 匹配斜杠。解析 html 时,最常用的是非贪婪匹配和分组捕获,因为它们能精准提取标签之间的内容。
下面通过几个典型场景,演示如何使用正则表达式从 html 中提取信息。
假设有一段 html 包含多个链接,需要提取每个链接的 url 和锚文本:
import re
html = '''
<a href="https://example.com/page1" rel="external nofollow" >第一篇文章</a>
<a href="https://example.com/page2" rel="external nofollow" >第二篇文章</a>
'''
pattern = r'<a href="([^" rel="external nofollow" ]+)">([^<]+)</a>'
matches = re.findall(pattern, html)
for url, text in matches:
print(f"url: {url}, 文本: {text}")这里 ([^"]+) 捕获 href 属性值,([^<]+) 捕获标签内的文本内容。
提取 <img> 标签中的 src 属性:
import re html = ''' <img src="/images/logo.png" alt="网站logo" /> <img src="/images/banner.jpg" alt="横幅" /> ''' pattern = r'<img[^>]+src="([^"]+)"' srcs = re.findall(pattern, html) print(srcs) # ['/images/logo.png', '/images/banner.jpg']
从简单的 html 表格中提取每一行的单元格内容:
import re
html = '''
<table>
<tr><td>姓名</td><td>年龄</td></tr>
<tr><td>张三</td><td>25</td></tr>
<tr><td>李四</td><td>30</td></tr>
</table>
'''
rows = re.findall(r'<tr>(.*?)</tr>', html, re.s)
for row in rows:
cells = re.findall(r'<td>(.*?)</td>', row)
print(cells)这里使用 re.s 标志,让点号也能匹配换行符,从而正确处理跨行的表格内容。
虽然正则表达式可以完成简单的 html 解析,但在实际使用中需要注意以下几点:
<div> 内部再嵌套 <div>。因此,对于结构复杂或不可控的 html,建议优先使用专门的解析库;正则表达式更适合处理格式相对固定、结构简单的片段。
本文介绍了如何使用正则表达式解析 html,包括提取链接、图片地址和表格数据等常见场景,并总结了使用正则表达式解析 html 的优缺点。在实际项目中,应根据 html 的复杂程度选择合适的工具:简单场景用正则表达式快速解决,复杂场景则交给专业的 html 解析库。
以上就是使用正则表达式解析html的实用指南的详细内容,更多关于使用正则表达式解析html的资料请关注代码网其它相关文章!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论