秒懂正则匹配,领略正则魅力

简介: 秒懂正则匹配,领略正则魅力

什么是正则表达式?

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

例如:

runoo+b,可以匹配 runoob、runooob、runoooooob 等,+ 号代表前面的字符必须至少出现一次(1次或多次)。

runoob,可以匹配 runob、runoob、runoooooob 等, 号代表前面的字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次)。

colou?r 可以匹配 color 或者 colour,? 问号代表前面的字符最多只可以出现一次(0次或1次)。

构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。

正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。


开始之前来个小插曲。 可以伴随一生的编程软件(完全免费)。里面除了全国top的刷题题库,还有招聘(社招和校招)、一些上岸大厂的大佬的面试经验,从学校到社会工作,时时刻刻你都可以用到,感兴趣的可以去注册试试可以伴随程序员一生的app


语法

语法一:image.png

💖💖**.和\n结合感觉直接无敌。**

💖💖**\s和\S,\d和\D,\w和\W,大小写都是相反的意思,两个和互为补充.例如\d是匹配数字,\D是匹配非数字。一篇所能看见的文章或者新闻不都是数字和非数字(符号,字母等)组成的吗。**


语法二image.png

量词,就是控制前面数量的词。例如:

我的电话是10000886

\d\d\d 匹配的是100

\d+ 匹配的是10000886


量词最重要的体现还是在贪婪和非贪婪上。


🚀🚀非贪婪

非贪婪,从左到右执行,.?会分开执行,会先执行 .,匹配最后一个游戏前的所有。然后执行问号,回溯找到符号要求的第一个游戏image.png🚀🚀贪婪

我们可以发现贪婪尽可能的匹配image.png我这有两个在线正则测试工具,连接会放在最后面。


python中的正则方法

findall

findall,找到所有


代码:


import re
lst=re.findall(r"\d+","我的电话是10011,第二个电话是10086")
print(lst)

结果:image.png

finditer

finditer,迭代器形式,效率更高


代码:

# todo 上面一个效率低,下面这个返回的是迭代器,效率高的多。循环打印
it=re.finditer(r"\d+","我的电话是10011,第二个电话是10086")
for i in it:
    print(i.group())

结果:image.png

search

search,找到符合结果的第一个匹配值,有点像非贪婪


代码:

# todo search  找到一个结果就返回,所以只找到了 10011 ,没有找到10086
s=re.search(r"\d+","我的电话是10011,第二个电话是10086")
print(s.group())

结果:image.png

match

match,从头开始匹配,慎用,稍有不注意万劫不复


代码:

# todo match() 从头开始匹配
a=re.match(r"\d+","我的电话是10011,第二个电话是10086")  # todo 报错
b=re.match(r"\d+","10011,第二个电话是10086")
print(b)

结果:image.pnga开始不是数字,而match是从头开始匹配的,所以肯定会报错,不信可以自己试试。

compile

compile,正则预加载,使用较广


代码:

# todo 预加载正则表达式
obj=re.compile(r"\d+")
result=obj.finditer("我的电话是10011,第二个电话是10086")
for i in result:
    print(i.group())
ret=obj.findall("明天就把欠我的100000000还我")
print(ret)

结果:image.png好处是可以反复使用,类似于封装的函数。

正则在线测试工具

来自开源中国的测试工具:

正则在线测试平台image.png

国外某机构正则测试平台[支持多语言]image.png




目录
相关文章
|
并行计算 数据可视化 开发者
RNA-seq 差异分析的点点滴滴(4)
RNA-seq 差异分析的点点滴滴(4)
RNA-seq 差异分析的点点滴滴(4)
|
缓存 负载均衡 测试技术
企业系统工程(Enterprise Systems Engineering, ESE)是一个跨学科的领域,它应用系统工程的原则和方法来规划、设计、实施和管理复杂的组织系统,特别是那些涉及信息技术(IT)和商业流程的系统。
企业系统工程(Enterprise Systems Engineering, ESE)是一个跨学科的领域,它应用系统工程的原则和方法来规划、设计、实施和管理复杂的组织系统,特别是那些涉及信息技术(IT)和商业流程的系统。
|
SQL 存储 运维
阿里云分布式关系型数据库服务 DRDS
DRDS 是阿里巴巴集团自主研发的分布式数据库中间件产品,专注于解决单机关系型数据库扩展性问题,具备轻量(无状态)、灵活、稳定、高效等特性,稳定运行11年,经历历届双十一核心交易业务和各类行业业务的考验
14355 0
|
SQL 存储 Oracle
MySQL数据库界面化工具 - Navicat的常用功能
MySQL数据库界面化工具 - Navicat的常用功能
755 0
|
Linux
关于ZooKeeper在Linux端启动失败的问题解决方案
关于ZooKeeper在Linux端启动失败的问题解决方案
763 0
关于ZooKeeper在Linux端启动失败的问题解决方案
|
3天前
|
云安全 人工智能 算法
以“AI对抗AI”,阿里云验证码进入2.0时代
三层立体防护,用大模型打赢人机攻防战
1307 3
|
3天前
|
机器学习/深度学习 安全 API
MAI-UI 开源:通用 GUI 智能体基座登顶 SOTA!
MAI-UI是通义实验室推出的全尺寸GUI智能体基座模型,原生集成用户交互、MCP工具调用与端云协同能力。支持跨App操作、模糊语义理解与主动提问澄清,通过大规模在线强化学习实现复杂任务自动化,在出行、办公等高频场景中表现卓越,已登顶ScreenSpot-Pro、MobileWorld等多项SOTA评测。
632 3
|
4天前
|
人工智能 Rust 运维
这个神器让你白嫖ClaudeOpus 4.5,Gemini 3!还能接Claude Code等任意平台
加我进AI讨论学习群,公众号右下角“联系方式”文末有老金的 开源知识库地址·全免费