七夕来了,教你用 Python 正则表达式匹配女朋友(文末有惊喜!)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Python全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Python知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注Python)
img

正文

re.match 在起始位置匹配

re.match 尝试从字符串的起始位置匹配一个模式。

函数语法:

re.match(pattern, string, flags=0)

参数说明:

| 参数 | 说明 |

| :-- | :-- |

| pattern | 匹配的正则表达式 |

| string | 待匹配的字符串 |

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

若在起始位置匹配成功,返回 re.Match 对象。若不成功,则返回 None。

re.Match 对象:点击查看文末解释。

标志位:点击查看文末解释。

返回的匹配对象的对象方法:

| re.Match 匹配对象方法 | 说明 |

| :-- | :-- |

| group(group=0) | 1. 返回匹配到的字符串。

2. 若指定 group,则返回指定的分组 |

| groups() | 返回一个元组,包含所有分组 |

| start(group=0)

end(group=0) | 1. 返回匹配到的字符串的起始或结束位置。

2. 若指定 group,则返回指定的分组的起始或结束位置 |

| span(group=0) | 1. 返回一个二项元组,包含匹配到的字符串开始、结束的位置

相当于 (start(group),end(group))

2. 若指定 group,则返回指定分组的位置 |

示例 1:

s = ‘David 612 - Python’

r = re.match(r’(.+) (\d+)',s) # 在表达式中,用小括号()括起来的即为分组

r # 函数返回的是 re.Match 对象

<re.Match object; span=(0, 9), match=‘David 612’>

r.group() # 返回匹配到的字符串

‘David 612’

r.group(1) # 返回第一个分组,分组的第一个下标为1,而不是0

‘David’

r.groups() # 返回所有分组

(‘David’, ‘612’)

r.span() # 返回匹配到的字符串位置

(0, 9)

r.span(2) # 返回第二个分组的位置

(6, 9)

开始位置:字符串第一个字符的下标

结束位置:字符串最后一个字符的下标 +1

示例 2:

s = ‘Python’

re.match(‘PyPy’,s)

None

re.fullmatch 匹配整个字符串

与 re.match 类似,但是是匹配整个字符串。

re.search 搜索整个字符串

re.search() 扫描整个字符串并返回第一个成功的匹配。

函数语法:

re.search(pattern, string, flags=0)

参数说明:

| 参数 | 说明 |

| :-- | :-- |

| pattern | 匹配的正则表达式 |

| string | 待匹配的字符串 |

| flags | 标志位,用于控制正则表达式的匹配方式 |

若匹配成功,返回 re.Match 对象。若不成功,则返回 None。

re.sub 替换

re.sub 用于替换字符串中的匹配项。

函数语法:

re.sub(pattern, repl, string, count=0, flags=0)

参数说明:

| 参数 | 说明 |

| :-- | :-- |

| pattern | 正则中的模式字符串 |

| repl | 替换的字符串,也可为一个函数 |

| string | 待替换的字符串 |

| count | 替换的最大次数,默认 0 表示替换所有 |

| flags | 编译时用的匹配模式,数字形式 |

若匹配成功,则返回替换后的字符串。

s = ‘Python2.2.4’

re.sub(‘\d’,‘3’,s) # 将所有数字替换为3

‘Python3.3.3’

repl 可以为一个函数。示例:

s = ‘Python2’

f = lambda m:str(int(m.group(1))+1)

re.sub(r’(\d)',f,s) # 将所有匹配到的数字+1

‘Python3’

re.split 切割

re.split 按照能够匹配的子串将字符串分割后返回列表。

函数语法:

re.split(pattern, string[, maxsplit=0, flags=0])

参数说明:

| 参数 | 说明 |

| :-- | :-- |

| pattern | 匹配的正则表达式 |

| string | 待匹配的字符串 |

| maxsplit | 分隔次数,默认为 0,不限制次数 |

| flags | 标志位,用于控制正则表达式的匹配方式 |

该函数返回一个列表。

示例:

s = ‘Python1,Python2,Python3’

re.split(r’\d’,s) # 以数字切割

[‘Python’, ‘,Python’, ‘,Python’, ‘’]

re.findall 查找所有

匹配正则表达式所匹配的所有子符串。

函数语法:

re.findall(pattern, string, flags=0)

参数说明:

| 参数 | 说明 |

| :-- | :-- |

| pattern | 匹配的正则表达式 |

| string | 待匹配的字符串 |

| flags | 标志位,用于控制正则表达式的匹配方式 |

在字符串中找到正则表达式所匹配的所有子符串,返回一个列表,包含匹配到的所有字符串。

若匹配的正则表达式中含分组,则只会返回分组内容。

如果没有找到匹配的,则返回空列表。

示例:

s = ‘Python1,Python2,Python3’

re.findall(r’\d’,s)

[‘1’, ‘2’, ‘3’] # 返回匹配到的所有字符串

re.findall(‘a’,s)

[] # 无匹配项,返回空列表

注意: match 和 search 是匹配一次,而 findall 匹配所有。

re.finditer 查找所有并返回迭代器

和 re.findall 类似,在字符串中找到正则表达式所匹配的所有字符串,并把它们作为一个迭代器返回。

函数语法:

re.finditer(pattern, string, flags=0)

re.finditer 返回的是 迭代器,包含匹配的 re.Match 对象 而不是字符串

re.finditer(r’\d’,s)

<callable_iterator object at 0x01C91898>

r = re.finditer(r’\d’,s)

r

<callable_iterator object at 0x01C918C8>

for t in r:

print(t)

print(t.group)

<re.Match object; span=(6, 7), match=‘1’>

<built-in method group of re.Match object at 0x01CABA68>

<re.Match object; span=(14, 15), match=‘2’>

<built-in method group of re.Match object at 0x01C763A0>

<re.Match object; span=(22, 23), match=‘3’>

<built-in method group of re.Match object at 0x01CABA68>

re.compile 生成表达式对象

re.compile 函数用于编译正则表达式,生成一个正则表达式(re.Regex)对象,供 match 和 search 等函数使用。

re.Regex 对象:文末解释,点击跳转,或点击上方蓝色超链接跳转。

函数语法:

re.compile(pattern[, flags])

参数说明:

| 参数 | 说明 |

| :-- | :-- |

| pattern | 字符串形式的正则表达式 |

| flags | 标志位,用于控制正则表达式的匹配方式 |

示例:

p = re.compile(r’\d’)

s = ‘Python1,Python2,Python3’

p.match(s,pos=0,endpos=20) # 从第一个开始匹配,不匹配,返回 None

None

pos 为开始匹配的位置,默认为 0,

endpos 为结束匹配的位置,默认为字符串总长

这两个参数只有在 re.Regex 对象的方法才有,即用 re.compile 生成的对象

p.match(s,6,20) # 从第六个开始匹配,匹配成功,返回 re.Match 对象

<re.Match object; span=(6, 7), match=‘1’>

p.search(s,0,10)

<re.Match object; span=(6, 7), match=‘1’>

p.findall(s,0,30)

[‘1’, ‘2’, ‘3’]

p.finditer(s,0,30)

<callable_iterator object at 0x01C14610>

p.sub(‘5’,s)

‘Python5,Python5,Python5’

p.split(s)

[‘Python’, ‘,Python’, ‘,Python’, ‘’]

re 对象


re.Match 对象

对象方法:

| re.Match 匹配对象方法 | 说明 |

| :-- | :-- |

| group(group=0) | 1. 返回匹配到的字符串。

2. 若指定 group,则返回指定的分组 |

| groups() | 返回一个元组,包含所有分组 |

| start(group=0)

end(group=0) | 1. 返回匹配到的字符串的起始或结束位置。

2. 若指定 group,则返回指定的分组的起始或结束位置 |

| span(group=0) | 1. 返回一个二项元组,包含匹配到的字符串开始、结束的位置

相当于 (start(group),end(group))

2. 若指定 group,则返回指定分组的位置 |

示例:

s = ‘David 612 - Python’

r = re.search(r’(\d+).*§',s)

r

<re.Match object; span=(6, 13), match=‘612 - P’> # 返回 re.Match 对象

r.group() # 获取匹配到的字符串

‘612 - P’

r.group(1) # 获取第一个分组

‘612’

r.groups() # 获取所有分组

(‘612’, ‘P’)

r.start() # 获取字符串开始位置

6

r.start(1) # 获取第一个分组开始位置

6

r.end() # 获取字符串结束位置

13

r.end(1) # 获取第一个分组结束位置

9

获取字符串位置

r.span()

(6, 13)

(r.start(),r.end())

(6, 13)

获取第二个分组的位置

r.span(2)

(12, 13)

(r.start(2),r.end(2))

(12, 13)

re.Regex 对象

re.compile 生成的对象,供 match 和 search 等函数使用。

re 修饰符 - 可选标志


正则表达式可以包含一些可选标志修饰符来控制匹配的模式。

修饰符被指定为一个可选的标志。

多个标志可以通过按位 OR(|) 它们来指定。

如 re.I | re.M 被设置成 I 和 M 标志

(1)Python所有方向的学习路线(新版)

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

最近我才对这些路线做了一下新的更新,知识体系更全面了。

在这里插入图片描述

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
在这里插入图片描述](https://img-blog.csdnimg.cn/1f807758e039481fa866130abf71d796.png#pic_center)

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
[外链图片转存中…(img-TfJROGxD-1713443940090)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值