re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
‘’’
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210605101217940.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NjY1NDExNA==,size_16,color_FFFFFF,t_70)
输出:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210605094703730.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NjY1NDExNA==,size_16,color_FFFFFF,t_70)
##### 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())#输出运智,运气
输出:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210605095237261.png)
2. `[]` 中括号:匹配中括号中的**任意一个字符**,
str1=‘hello’
res=re.match(‘[he]’,str1)
print(res.group())#输出:h
###### 2.2.2 分组匹配
| 符号 | 匹配规则 |
| --- | --- |
| | |
| (ab) | 将括号中字符作为一个分组 |
| \num | 引用分组num匹配到的字符串 |
| (?P) | 分组起别名 |
| (?P=name) | 引用别名为name分组匹配到的字符串 |
代码按例:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210605101326770.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NjY1NDExNA==,size_16,color_FFFFFF,t_70)
###### 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’)#匹配0次
print(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’)#精确匹配
输出:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210605101721448.png)
2. 代码按例匹配邮箱
regexMail=re.match(‘[a-zA-Z0-9]{6,11}@qq.com’,‘chenyunzhi@qq.com’)
if regexMail:
print(‘匹配成功{}’.format(regexMail.group()))
pass
输出:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210605101815689.png)
###### 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
输出:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210605102641479.png)
#### 三. 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 | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 |
3. 代码
‘’’
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 | 标志位,用于控制正则表达式的匹配方式 |
3. 代码
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210605104526439.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NjY1NDExNA==,size_16,color_FFFFFF,t_70)
输出:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210605104421371.png)
##### 3.5 split方法
1. **split**:实现**分割**字符串,以**列表**形式返回
2. 语法:`split(pattern, string, maxsplit=0, flags=0)`
| 参数 | 描述 |
| --- | --- |
| pattern | 匹配的正则表达式 |
| string | 要匹配的字符串。 |
| maxsplit | 分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。 |
| flags | 标志位,用于控制正则表达式的匹配方式 |
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
### 一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
![](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)
### 二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
![](https://img-blog.csdnimg.cn/img_convert/8c4513c1a906b72cbf93031e6781512b.png)
### 三、全套PDF电子书
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。
![](https://img-blog.csdnimg.cn/img_convert/46506ae54be168b93cf63939786134ca.png)
### 四、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
![](https://img-blog.csdnimg.cn/afc935d834c5452090670f48eda180e0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56iL5bqP5aqb56eD56eD,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
### 五、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
![](https://img-blog.csdnimg.cn/img_convert/252731a671c1fb70aad5355a2c5eeff0.png)
### 六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
![](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)
![](https://img-blog.csdnimg.cn/img_convert/d2d978bb523c810abca3abe69e09bc1a.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**