码迷,mamicode.com
首页 > 编程语言 > 详细

Python正则表达式讲解

时间:2018-11-18 11:29:35      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:order   逻辑   数字   代码   item   port   http   很多   测试   

什么是正则表达式?

  正则表达式,又称规则表达式(英文: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 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}((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正则表达式讲解

标签:order   逻辑   数字   代码   item   port   http   很多   测试   

原文地址:https://www.cnblogs.com/mCarrYoung/p/9977073.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!