还没搞懂正则?熬夜到虚脱整理出来的Python的正则表达式总结(Regular Expression)

32 阅读6分钟

| flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 |

  1. 我们可以使用group(num)groups() 匹配对象函数来获取匹配表达式。
group(num=0)匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups()返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
  1. 代码演示
'''
修饰符	描述
re.I	使匹配对大小写不敏感
re.L	做本地化识别(locale-aware)匹配
re.M	多行匹配,影响 ^ 和 $
re.S	使 . 匹配包括换行在内的所有字符
re.U	根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X	该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
'''


在这里插入图片描述

输出:
在这里插入图片描述

2.2 匹配规则
2.2.1 匹配字符
符号匹配规则
.(点)匹配任意1个字符除了换行符\n
[abc ]匹配abc中的任意一个字符
\d匹配一个数字,即0-9
\D匹配非数字,即不是数字
\s匹配空白,即空格,tab键
\S匹配非空白,除空格,tab键之类的
\w匹配单词字符,即a-z、A-Z、0-9、_
\W匹配非单词字符
  1. .点的使用,匹配除了换行符之外的任意一个字符字符,还可以.*输出后面的字符串
import re
data='python'
parrtern='..'#匹配规则,这里匹配两个字符
res=re.match(parrtern,data)
print(res.group())#输出:py
'''测试二'''
names='运智在学习python','运气','换人'
pattern='运.'#匹配规则:会匹配运开头的
for item in names:
    chen=re.match(pattern,item)
    if chen:
        print(chen.group())#输出运智,运气


输出:
在这里插入图片描述
2. [] 中括号:匹配中括号中的任意一个字符

str1='hello'
res=re.match('[he]',str1)
print(res.group())#输出:h


2.2.2 分组匹配
符号匹配规则
(ab)将括号中字符作为一个分组
\num引用分组num匹配到的字符串
(?P)分组起别名
(?P=name)引用别名为name分组匹配到的字符串

代码按例:

在这里插入图片描述

2.2.3 限定匹配字符规则

原理:就是匹配数量

符号匹配规则
*匹配前一个字符出现0次或者无限次,即可有可无
+匹配前一个字符出现1次或者无限次,即至少有1次
?匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m}匹配前一个字符出现m次
{m,}匹配前一个字符至少出现m次
{n,m}匹配前一个字符出现从n到m次
  1. * 匹配前一个字符出现0次或者无限次,即可有可无
    代码:
res=re.match('[A-Z]*','Cy')#匹配0print(res.group())#C
res=re.match('[A-Z][a-z]*','Che')#也可以写成" [A-Za-z]* "
print(res.group())
# re.match('[a-zA-Z]+[\w]*','na99m_e')
#re.match('\d{4}','1234')#精确匹配


输出:

在这里插入图片描述
2. 代码按例匹配邮箱

regexMail=re.match('[a-zA-Z0-9]{6,11}@qq.com','chenyunzhi@qq.com')
if regexMail:
    print('匹配成功{}'.format(regexMail.group()))
    pass


输出:
在这里插入图片描述

2.2.4 转义字符
符号匹配规则
^匹配字符串开头
$匹配字符串结尾
import re
# 在正则前加r,表示原生字符串,python字符串不转义 或者直接\\\\a。
print(re.match(r'c:\\a.txt','c:\\a.txt').group())#c:\a.txt

dt='python is chen'
result=re.match('^p.*',dt)#开头是对的就输出
chen=re.match('^p\w{5}',dt)
End=re.match('\w{5,12}@[\w]{1,9}.\w{3}$','chenyunzhi@qq.com')
if result:
    print(result.group())#python is chen
    print(chen.group())#python
    print(End.group())#chenyunzhi@qq.com


输出:
在这里插入图片描述

三. re中的编译函数

3.1 compile方法
  1. compile 可以把一个字符串编译成字节码
  2. 优点:在使用正则表达式进行match的操作时,python会将字符串转为正则表达式对象,
  3. 而如果使用compile只需要一次转换,以后再使用模式对象的话 无需转换
import re
rs=re.compile('\w.*')
res=rs.match('chenyunzhi')
print(res.group())#输出:chenyunzhi


3.2 search方法
  1. search在全文中匹配一次,匹配到就返回
  2. 语法:re.search(pattern, string, flags=0)
参数描述
pattern匹配的正则表达式
string要匹配的字符串。
flags标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
  1. 代码
'''
print(re.search('python','人生苦短,我用python').group())
#输出:python


3.3 finall方法
  1. finall():查询字符串某个正则表达式全部非重复出现的情况 返回是一个符合正则表达式的结果列表
  2. 语法:findall(string[, pos[, endpos]])
参数描述
string待匹配的字符串。
pos可选参数,指定字符串的起始位置,默认为 0。
endpos可选参数,指定字符串的结束位置,默认为字符串的长度。

3.代码

print(re.findall('p','python的开头是p'))#输出:['p', 'p']


小结:search找到就返回,finall全部找到才返回

3.4 sub方法
  1. sub:将匹配到的数据进行替换,实现目标的搜索查找
  2. 语法:sub(pattern, repl, string, count=0, flags=0)
参数描述
pattern正则中的模式字符串。
repl替换的字符串,也可为一个函数。
string要被查找替换的原始字符串。
count模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
flags标志位,用于控制正则表达式的匹配方式
  1. 代码

在这里插入图片描述

输出:
在这里插入图片描述

3.5 split方法
  1. split:实现分割字符串,以列表形式返回
  2. 语法:split(pattern, string, maxsplit=0, flags=0)
参数描述
pattern匹配的正则表达式
string要匹配的字符串。
maxsplit分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。
flags标志位,用于控制正则表达式的匹配方式
print(re.split(',','chen,yun,zhi'))#输出:['chen', 'yun', 'zhi']


四. 贪婪模式与非贪婪模式

默认条件下为贪婪模式

  1. 贪婪:在满足条件情况下尽可能匹配到数据
  2. 非贪婪满足条件就可以,在"*","?","+","{m,n}"后面加上,就能将贪婪变成非贪婪.

代码

#贪婪模式
pattern=re.compile('a.*b')
result=pattern.search('abcabcd')


### 最后

Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

#### 👉Python所有方向的学习路线👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/969c5a1b02d54794b65389bfb4a6523f~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1771407282&x-signature=%2FH5J6Jow7%2BDElKIDwrH2Kgf8%2BpU%3D)

#### 👉Python必备开发工具👈

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/cba5971daeb44b9cab796ce178b90fa9~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1771407282&x-signature=gx0HSYP25x%2BxtxRt0g2Vu7bwYAE%3D)



#### 👉Python全套学习视频👈

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/ddb1a905ecc64b8e896a0eff1948be54~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1771407282&x-signature=Jf2t6UjPeF%2Bq9jQKU0xdiMrdArQ%3D)



#### 👉实战案例👈



学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。



因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。

![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/de4de89effbe48c6847341bb1201dbb3~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1771407282&x-signature=QQyapPbUYb5t2bvdvKqLfdpGssY%3D)



#### 👉大厂面试真题👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/bc512a4b97c34689b021cce2b182995e~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1771407282&x-signature=ux3%2BqLjvuS2fk1VfQSqzNwbDS4Q%3D)



**了解详情:https://docs.qq.com/doc/DSnl3ZGlhT1RDaVhV**