Python正则表达式讲解,,什么是正则表达式? 


什么是正则表达式?

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

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

怎么使用正则表达式?

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

  import re

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

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

正则表达式符号:

‘.‘默认匹配除了\n以外的任意一个字符
‘^‘匹配字符开头
‘$‘匹配字符结尾
‘*‘匹配*号前的字符0次或者多次
‘+‘匹配前一个字符1次或多次
‘?‘匹配前一个字符1次或0次
‘{m}‘匹配前一个字符m次
‘{n,m}‘匹配前一个字符n到m次
‘|‘匹配|左或|右的字符
‘(...)‘分组匹配
‘\A‘只从字符开头匹配
‘\Z‘匹配字符结尾,和$一样
‘\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 re2 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 re2 3 z = ‘[0-9]{12}‘4 str = ‘xiaoming202201056234xiaogang201023415674xiaoli222278564356‘5 s= re.sub(z,‘1212‘,str)6 print(s)

运行结果

xiaoming1212xiaogang1212xiaoli1212

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

1 import re2 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}((19\d{2}(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(19\d{2}(0[13578]|1[02])31)|(19\d{2}02(0[1-9]|1\d|2[0-8]))|(19([13579][26]|[2468][048]|0[48])0229))\d{3}(\d|X|x)?$。这里知识匹配的格式是否正确

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

匹配中文:[\u4e00-\u9fa5]+

Python正则表达式讲解

评论关闭