广告位联系
返回顶部
分享到

使用正则表达式解析HTML的实用介绍

正则表达式 来源:互联网 作者:佚名 发布时间:2026-09-27 21:31:03 人浏览
摘要

引言 在 Web 开发和数据采集工作中,经常需要从 HTML 页面中提取信息。虽然 HTML 解析库(如 BeautifulSoup、jsoup、HtmlAgilityPack 等)是更稳妥的选择,但在某些轻量场景下,使用正则表达式解析 H

引言

在 Web 开发和数据采集工作中,经常需要从 HTML 页面中提取信息。虽然 HTML 解析库(如 BeautifulSoup、jsoup、HtmlAgilityPack 等)是更稳妥的选择,但在某些轻量场景下,使用正则表达式解析 HTML 仍然是一种快速、直接的方案。本文将从基础概念出发,介绍如何使用正则表达式解析 HTML,并给出常见场景的实用示例。

2. 正则表达式基础回顾

在开始解析 HTML 之前,先回顾几个常用的正则表达式语法元素:

  • 字符类:[a-z] 匹配任意小写字母,[0-9] 匹配任意数字。
  • 量词:* 表示零次或多次,+ 表示一次或多次,? 表示零次或一次。
  • 分组:使用圆括号 () 捕获匹配的子串。
  • 非贪婪匹配:在量词后加 ?,如 .*?,表示尽可能少地匹配字符。
  • 转义字符:\. 匹配点号,\/ 匹配斜杠。

解析 HTML 时,最常用的是非贪婪匹配和分组捕获,因为它们能精准提取标签之间的内容。

3. 解析 HTML 的常见场景

下面通过几个典型场景,演示如何使用正则表达式从 HTML 中提取信息。

3.1 提取链接和文本

假设有一段 HTML 包含多个链接,需要提取每个链接的 URL 和锚文本:

1

2

3

4

5

6

7

8

9

10

11

12

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 属性值,([^<]+) 捕获标签内的文本内容。

3.2 提取图片地址

提取 <img> 标签中的 src 属性:

1

2

3

4

5

6

7

8

9

10

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']

3.3 提取表格数据

从简单的 HTML 表格中提取每一行的单元格内容:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

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 标志,让点号也能匹配换行符,从而正确处理跨行的表格内容。

4. 正则表达式解析 HTML 的注意事项

虽然正则表达式可以完成简单的 HTML 解析,但在实际使用中需要注意以下几点:

  • HTML 结构不规范:真实网页中标签经常不闭合、属性顺序不固定,正则表达式容易匹配失败。
  • 嵌套标签问题:正则表达式难以处理嵌套结构,例如 <div> 内部再嵌套 <div>。
  • 性能问题:对大型 HTML 文档使用复杂的正则表达式可能导致性能下降。
  • 转义繁琐:HTML 中的特殊字符需要大量转义,代码可读性较差。

因此,对于结构复杂或不可控的 HTML,建议优先使用专门的解析库;正则表达式更适合处理格式相对固定、结构简单的片段。

5. 总结

本文介绍了如何使用正则表达式解析 HTML,包括提取链接、图片地址和表格数据等常见场景,并总结了使用正则表达式解析 HTML 的优缺点。在实际项目中,应根据 HTML 的复杂程度选择合适的工具:简单场景用正则表达式快速解决,复杂场景则交给专业的 HTML 解析库。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 使用正则表达式解析HTML的实用介绍
    引言 在 Web 开发和数据采集工作中,经常需要从 HTML 页面中提取信息。虽然 HTML 解析库(如 BeautifulSoup、jsoup、HtmlAgilityPack 等)是更稳妥的选
  • 通配符和正则表达式介绍
    一、通配符 通配符也叫文件名替换,它主要是作用于匹配文件名,常用命令是ls、find、cp、mv。 主要用于匹配文件名 符号 作用 * 匹配任意(
  • kotlin正则表达式识别年月日代码

    kotlin正则表达式识别年月日代码
    kotlin - 正则表达式,识别年月日 1 !--正则表达式日期识别,不需要处理2025.08.08的日期-- string name=date_regex(?:^|(?lt;![-\\d]))(?:(?:[2-9][0-9]{3}[-年]
  • 正则表达式位置匹配应用介绍
    正则表达式中的位置匹配(锚点) 正则表达式不仅能匹配字符,还能匹配位置(也称为锚点或锚定)。位置匹配不消耗任何字符,只指定匹
  • 正则表达式高级用法完整介绍

    正则表达式高级用法完整介绍
    本文中的示例均在python3.11中运行成功。 如果运行出现re.error报错,可以更换python版本或者用regex模块替换re模块后再运行。 高级特性详解 贪
  • 正则表达式的整理与归纳

    正则表达式的整理与归纳
    正则表达式是由普通字符(a-z)和特殊字符(元字符)组成的文本模式。例如,在正则表达式[a-z]*描述了所有仅包含小写字母的字符串,其中a,z为
  • 正则表达式IP地址合法性判断
    一、正则表达式常见匹配字符快速回顾 符号 描述 . 匹配处换行符\n之外任意1个字符 [] 匹配[]中任意一个 \d 一个0-9数字 \D 匹配非数字 \w 匹配
  • 正则表达式中的特殊符号的介绍
    正则表达式中的特殊符号 如: 1 preg_match(/.+?hxx/is, hxx)); 返回,0,表示没有匹配,这是因为.+?的作用,具体讲一下。 .的作用 作用:匹配除换
  • S3标签字符清洗的正则表达式实践记录
    深入理解 S3 标签字符清洗的正则表达式实践 在构建与 AWS S3 相关的服务时,尤其是使用 S3 标签(Tag)作为资源标识或元数据时,确保标签值
  • 正则表达式r前缀使用指南及如何避免常见错误

    正则表达式r前缀使用指南及如何避免常见错误
    正则表达式中的r:解锁字符串转义的魔法 正则表达式是处理字符串的强大工具,但它常常伴随着转义字符的复杂性。如果你曾因\n、\t或\
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计