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

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

什么是正则表达式?

正则表达式(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




目录
相关文章
|
6月前
|
Java
【正则秘籍】四大匹配模式:揭秘文本处理的终极武器!
【8月更文挑战第25天】本文以问答形式深入介绍了正则表达式中的四种关键匹配模式:贪婪匹配、非贪婪匹配、先行断言与后行断言。通过具体的Java示例代码,展示了每种模式的工作原理及应用场景。贪婪匹配适用于提取最长匹配串,而非贪婪匹配则用于获取最短匹配。先行断言确保匹配后的内容符合特定模式,而后行断言则检查匹配前的内容不符合指定模式。了解并熟练运用这些模式对于提高文本处理能力至关重要。
85 2
|
6月前
|
大数据 程序员
为什么要学正则表达式 - 1
为什么要学正则表达式 - 1
42 1
|
6月前
为什么要学正则表达式 - 2
为什么要学正则表达式 - 2
30 1
|
6月前
|
Python
为什么要学正则表达式 - 5
为什么要学正则表达式 - 5
33 0
|
6月前
|
Python
为什么要学正则表达式 - 4
为什么要学正则表达式 - 4
29 0
|
6月前
为什么要学正则表达式 - 3
为什么要学正则表达式 - 3
30 0
|
8月前
|
C++
心得经验总结:正则表达式2
心得经验总结:正则表达式2
36 0
|
前端开发 JavaScript 数据安全/隐私保护
关于正则表达式,小黄人有话要说!!!
本文将带你逐步学习正则表达式的基础知识和高级技巧,从基本的元字符到实用的正则表达式示例,让你轻松掌握这一重要的编程技能。无论你是初学者还是有一定经验的开发者,这篇文章都能帮助你更好地理解和应用正则表达式。
138 0
关于正则表达式,小黄人有话要说!!!
|
JavaScript 前端开发 索引
【重温基础】9.正则表达式
【重温基础】9.正则表达式
202 0
|
机器学习/深度学习 Java API