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正则表达式讲解的主要内容,如果未能解决你的问题,请参考以下文章
全网最全正则表达式系统讲解,实战练习,豆瓣案例解析(附讲解源代码)