Python正则表达式讲解

Posted mcarryoung

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python正则表达式讲解相关的知识,希望对你有一定的参考价值。

什么是正则表达式?

  正则表达式,又称规则表达式(英文:Regular Expression,在代码中简写为regex,regexp或re),计算机科学的一个概念,正则表达式通常被用来检索、替换那些符合某个规则的文本。

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符,及这些特定字符的组合,组成一个‘规则字符串’,这个‘规则字符串’用来表达对字符串一种过滤逻辑。更多关于正则表达式介绍,点击这里进入百度百科。

怎么使用正则表达式?

  首先,需要导入re模块,因为关于正则表达式处理的功能函数都在这个模块内

  import re

re模块共分为5个功能函数:

  • match 从头开始匹配
  • search 使用最多,在整个文本搜索
  • findall 取到所有符合逻辑的字符串
  • split 分割
  • sub 替换

正则表达式符号:

‘.‘ 默认匹配除了 以外的任意一个字符
‘^‘ 匹配字符开头
‘$‘ 匹配字符结尾
‘*‘ 匹配*号前的字符0次或者多次
‘+‘ 匹配前一个字符1次或多次
‘?‘ 匹配前一个字符1次或0次
‘{m}‘ 匹配前一个字符m次
‘{n,m}‘ 匹配前一个字符n到m次
‘|‘ 匹配|左或|右的字符
‘(...)‘ 分组匹配
‘A‘ 只从字符开头匹配
‘‘ 匹配字符结尾,和$一样
‘d‘ 匹配0到9的数字
‘D‘ 匹配非数字
‘w‘ 匹配[A-Za-z0-9]
‘W‘ 匹配非[A-Za-z0-9]
‘s‘ 匹配空白字符

基础的说完了,下面看看如何使用强大的正则来处理字符串吧

比如说,现在一顿学生的学号和姓名在一块,我现在需要把他们的学号取出来如何去呢?(注:学号是12位的,都是数字)

逻辑分析:上面说的学号是12位的,每个学生的姓名都是英文字母,结合正则表达式字符来解释,取出姓名就可以写成[a-z]+,取出学号可以写成[0-9]{12},因为匹配整个字符串,所以要使用findall函数

下面我们使用代码来测试下:

1 import re
2 
3 z = [0-9]{12}
4 z1 = [a-z]+
5 str = xiaoming202201056234xiaogang201023415674xiaoli222278564356
6 s1 = re.findall(z1,str)
7 s= re.findall(z,str)
8 print(s1)
9 print(s)

运行结果

[xiaoming, xiaogang, xiaoli]
[202201056234, 201023415674, 222278564356]

这只是一些简单的例子,对于正则表达式需要不断的练习,网上有很多的在线正则表达式测试的连接,可以去学习学习

sub替换匹配到的字符串:这里是把匹配到的学号替换成1212

1 import re
2 
3 z = [0-9]{12}
4 str = xiaoming202201056234xiaogang201023415674xiaoli222278564356
5 s= re.sub(z,1212,str)
6 print(s)

运行结果

xiaoming1212xiaogang1212xiaoli1212

通过split来分割字符串:通过学号来分割字符串

1 import re
2 
3 z = [0-9]{12}
4 str = xiaoming202201056234xiaogang201023415674xiaoli222278564356
5 s= re.split(z,str)
6 print(s)

运行结果

[xiaoming, xiaogang, xiaoli, ‘‘]

这里的结果为什么会在最后多处一个‘’。以为我们分割的时候在最后面的字符串是一个学号,所以说会多出来一个

 

这里我下面写几个正则表达式的匹配规则,大家结合上面的正则表达式符号看看能不能理解为什么这样写

匹配身份证号:^[1-9][0-7]d{4}((19d{2}(0[13-9]|1[012])(0[1-9]|[12]d|30))|(19d{2}(0[13578]|1[02])31)|(19d{2}02(0[1-9]|1d|2[0-8]))|(19([13579][26]|[2468][048]|0[48])0229))d{3}(d|X|x)?$。这里知识匹配的格式是否正确

匹配邮箱:^[a-z0-9A-Z]+[- | a-z0-9A-Z . _][email protected]([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\.)+[a-z]{2,}$

匹配中文:[u4e00-u9fa5]+

 

以上是关于Python正则表达式讲解的主要内容,如果未能解决你的问题,请参考以下文章

循环通过 python 正则表达式匹配

Python正则及geometer正则截图讲解

Python正则表达式,这一篇就够了!

全网最全正则表达式系统讲解,实战练习,豆瓣案例解析(附讲解源代码)

通过 Java 正则表达式提取 semver 版本字符串的片段

python常用re正则表达式大全,查找指定内容