正则表达式

简介: 正则表达式(Regular Expression)是一种强大的文本处理工具,用于匹配、查找、匹配或替换文本中的模式或特定字符组合。它由一系列特殊字符和普通字符组成,遵循预定义的规则来描述字符串中的模式。在处理网页数据时,正则表达式可以帮助从杂乱的数据中提取出需要的信息。

 一,概念

正则表达式(Regular Expression)是计算机科学中用于处理字符串的强大工具,它提供了一种强大且灵活的方式来描述、查找、匹配或替换文本中的模式或字符组合。正则表达式是由一系列特殊字符和普通字符组成的字符串,它们遵循一套预定义的规则来指定搜索模式。说白了,就是当我们通过爬虫爬取到了网页数据(网页数据本身也是字符串),但这些网页数据杂乱不堪,想要提取我们想要的信息极为不易,这时正则表达式都有了作用。简单来说,正则表达式就是用一些蕴含某种含义的字符来排列组合形成的一种面向字符串的筛选规则,满足条件的字符串留下,不满足的剔除。

在线正则表达式测试 (oschina.net)

我们可以通过这个网站对以下的元字符和量词进行检验。

二,常用元字符

.             

匹配除换行符的任意字符

\w

匹配字母或数字或下划线

\s

匹配任意空白符

\d

匹配数字

\n

匹配一个换行符

\t

匹配一个制表符

^

匹配字符串的开始

$

匹配字符串的结尾

\W

匹配非字母,数字,下划线

\D

匹配非数字

\S

匹配非空白符

a|b

匹配字符a或字符b

()

匹配括号内的表达式,也表示一个组

[…]

匹配字符组中的字符

[^…]

匹配除了字符组中字符的所有字符

三,量词

*

重复零次或更多次

+

重复一次或更多次

?

重复零次或一次

{n}

重复n次

{n,}

重复n次或更多次

{n,m}

重复n到m次

四,贪婪匹配和惰性匹配

贪婪匹配和惰性匹配是正则表达式中的两种不同匹配模式,它们主要影响量词(如*、+、?)在进行匹配时的行为。

  1. 贪婪匹配: 在贪婪匹配模式下,正则表达式会尽可能多地匹配字符,即尽可能让量词匹配的次数达到最大。例如,对于字符串 "aabbcc" 和正则表达式 "a+b+",贪婪匹配将匹配整个字符串 "aabb",因为 "+" 符号表示前面的 "a" 或 "b" 可以出现一次或多次,它会尽可能多地匹配字符。
  2. 惰性匹配或非贪婪匹配: 惰性匹配则是尽可能少地匹配字符,只要满足匹配条件就停止匹配。同样以上述例子,在惰性匹配模式下,对于正则表达式 "a+?b+?",它会在第一个 "a" 后面匹配尽可能少的 "b",因此它会匹配 "aab",而不是整个 "aabb"。

贪婪匹配:尽可能多的匹配结果

.*

惰性匹配:尽可能少的匹配结果

.*?

五,Re模块

1.findall方法

import re
res = re.findall(r"\d+","我的电话号码是134551515212")
print(res)

image.gif

输出结果: ['134551515212']

re.findall方法是最普通的方法之一,即应用正则表达式对字符串进行筛选。

2.finditer方法

import re
res_iter = re.finditer(r"\d+","我的电话号码是11111111,ID是11515515121215")
print(res_iter)#返回了一个迭代器
for i in res_iter:
    print(i)#得到re.Match对象
    print(i.group())#得到数据

image.gif

image.gif 编辑

re.finditer方法会返回一个迭代器,实际使用中被经常使用,我们可以用for循环遍历迭代器,得到re.Match对象,最后用group查看数据,group后续数据解析中用处很大。

3.search方法

import re
#search只会匹配第一次结果
res_search = re.search(r"\d+","我今年22岁,月薪8000+")
print(res_search)#返回re.Match对象
print(res_search.group())#返回结果

image.gif

image.gif 编辑

re.search方法只会匹配一次,找到就完事。同样返回一个re.Match对象,使用group查看数据。

4.match方法

import re
#match匹配时从字符串开头进行匹配,相当于^
res_match = re.match(r"\d+","我今年22岁,月薪8000+")
print(res_match)#None

image.gif

返回结果为None,re.match方法会匹配字符串开头,相当于^,使用较少。

5.预加载

import re
#预加载:防止重复使用正则,消耗内存
obj = re.compile(r"\d+")
obj.match()
obj.search()
obj.findall()
obj.finditer()

image.gif

预加载有点像宏定义,我们用obj代替了一串又一串相同的正则表达式,这样就不用担心太浪费内存了。

六,Re模块应用

s = """<div class='rect'><span id='10001'>庆余年</span></div>
    <div class='rect'><span id='10002'>诡秘之主</span></div>"""
obj = re.compile(r"<span id='(?P<id>\d+)'>(?P<name>.*?)</span>")#提取数据时用小括号括起来,单独起名字(?P<name>正则),提取时用group(name)就可以了
res = obj.finditer(s)
for i in res:
    id = i.group("id")
    name = i.group("name")
    print(id,name)

image.gif

image.gif 编辑

我们可以用(?P<name>正则)来进行数据解析,把不同种类数据进行划分,再使用迭代器遍历查看,group()这时有了大用,我们可以将命名好的类别填入,group()会返回这个类别下的数据。这样可以提升我们的效率,方便管理。

目录
相关文章
|
4月前
|
编解码 运维 算法
iOS云手机H.264与H.265编解码技术对比 2026远程低延迟传输选型科普
云手机流畅度关键在视频编码!H.264兼容广但耗流高、延迟大;H.265硬编码码率降50%、延迟≤30ms,苹果原生优化,省流又跟手。2026年中高端云手机已全面转向H.265,iOS用户务必认准硬件编码方案。(239字)
|
8月前
|
人工智能 监控 API
AI自动盯盘自由!OpenClaw 股票监控Skill实战(阿里云/本地部署+行情实时查询+避坑指南)
2026年,AI智能体已经深度融入日常投资与资产管理场景,OpenClaw(Clawdbot)凭借高度灵活的技能扩展机制,成为普通投资者实现自动化盯盘的首选工具。对于日常忙于工作、没有时间时刻盯盘的用户来说,能够让AI自动监控股票行情、实时反馈涨跌数据、动态管理自选股,已经成为刚需。Stock Watcher 作为 OpenClaw 生态中使用率极高的股票监控技能,可以直接对接实时行情源,支持沪深A股、科创板行情查询、自选股管理、涨跌提醒、走势总结,让你的 OpenClaw 从普通聊天助手,秒变24小时在线的股市观察员。
6637 5
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课15 集成DeepSeek等大模型
本文介绍了如何在PolarDB数据库中接入私有化大模型服务,以实现多种应用场景。实验环境依赖于Docker容器中的loop设备模拟共享存储,具体搭建方法可参考相关系列文章。文中详细描述了部署ollama服务、编译并安装http和openai插件的过程,并通过示例展示了如何使用这些插件调用大模型API进行文本分析和情感分类等任务。此外,还探讨了如何设计表结构及触发器函数自动处理客户反馈数据,以及生成满足需求的SQL查询语句。最后对比了不同模型的回答效果,展示了deepseek-r1模型的优势。
1195 3
|
安全 Python
Python语言中常用的文件操作方法探讨
通过上述方法的结合使用,我们可以构筑出强大并且可靠的文件操作逻辑,切实解决日常编程中遇到的文件处理问题。
498 72
|
缓存 运维 安全
WordPress安全加速:Cloudflare + Nginx缓存优化方案
本文介绍如何通过Cloudflare与Nginx优化WordPress网站性能,涵盖静态资源长期缓存、动态页面智能缓存及敏感路径保护,提升加载速度并保障后台安全。适用于使用Cloudflare与Nginx环境的WordPress站点。
603 0
|
传感器 数据采集 算法
《边缘算力困局突破:智能体模型动态调度全解析》
边缘设备如智能摄像头、传感器等在生活和生产中广泛应用,但其算力有限,难以高效运行复杂智能体模型。为解决这一问题,动态调度策略应运而生。通过任务优先级调度、模型分区与动态加载以及基于网络状态的调度,可灵活调整资源分配,优化任务执行效率。这些策略确保高优先级任务优先处理,按需加载模型模块,并根据网络状况合理分配计算任务。然而,动态调度面临实时监测和额外开销等挑战,需要优化算法和技术支持。成功实现动态调度将推动边缘计算在自动驾驶、智能安防、医疗等领域发挥更大潜力,带来深远变革。
618 6
|
JSON API UED
快递查询 API 对接指南(Python示例)
在电商与物流快速发展背景下,实时快递查询成为系统开发常见需求。本文介绍如何通过快递查询API快速集成物流信息,提升自动化水平与用户体验,并提供Python调用示例及问题解决方案。
1190 0
|
存储 人工智能 安全
5款值的推荐的高效工具软件
本文介绍了五款实用工具软件:矢量设计工具Affinity Designer、数字绘画软件Sketchable、在线AI工具箱3171.CN、密码管理工具KeePassX及效率搜索软件Listary,涵盖设计、办公、安全与系统效率提升,助力高效工作。
1290 0
|
存储 资源调度 JavaScript
npm、cnpm 和 pnpm 是三种常用的 Node.js 包管理工具
npm、cnpm 和 pnpm 是三种常用的 Node.js 包管理工具。npm 是官方默认的包管理器,提供依赖管理、安装和更新等功能;cnpm 是由阿里巴巴开发的 npm 镜像,专为中国大陆用户优化,解决下载速度慢的问题;pnpm 通过硬链接技术提高安装速度并节省磁盘空间,特别适合磁盘资源紧张的环境。三者命令类似,但各有特色,开发者可根据需求选择合适的工具。
3109 5
|
存储 供应链 安全
深入浅出:区块链技术的奥秘与应用
本文旨在探索区块链技术背后的原理,以及它如何在各行各业中被应用。我们将从区块链的基本概念入手,逐步深入到其工作原理和实际应用案例,为读者提供一个全面而深入的理解。无论你是技术爱好者还是行业从业者,本文都将为你揭开区块链技术的神秘面纱。