首页 技术 正文
技术 2022年11月8日
0 收藏 965 点赞 1,411 浏览 3619 个字

re模块(正则表达式)

 

一、什么是正则表达式

正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。

二、正则表达式基础

字符组 : [字符组]

在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示 字符分为很多类,比如数字、字母、标点等等。

1 [1]                       匹配12 [123]        匹配1、2、33 [0-9]       匹配任意一个数字4 [a-z]       匹配任意一个小写字母5 [A-Z]       匹配任意一个大写字母6 [A-Za-z]      匹配任意一个字母

示例如下:

1 print(re.findall('[1]','Zll5201314'))       #['1', '1']2 print(re.findall('[123]','Zll5201314'))     #['2', '1', '3', '1']3 print(re.findall('[0-9]','Zll5201314'))     #['5', '2', '0', '1', '3', '1', '4']4 print(re.findall('[a-z]','Zll5201314'))     #['l', 'l']5 print(re.findall('[A-Z]','Zll5201314'))     #['Z']6 print(re.findall('[a-zA-Z]','Zll5201314'))  #['Z', 'l', 'l']7 print(re.findall('[A-Za-z0-3]','Zll5201314')) #['Z', 'l', 'l', '2', '0', '1', '3', '1']

元字符:

 1 .    匹配除换行符以外的任意字符 2 \w    匹配字母或者数字或者下划线 3 \s     匹配任意空白字符 4 \d     匹配数字 5 \n     匹配换行符 6 \t    匹配制表符tab 7 \b    匹配一个单词的结尾 8 ^    匹配字符串的开始 9 $    匹配字符串的结尾10 \W   匹配非字母或下划线或数字11 \D   匹配非数字12 \S   匹配非空白符13 |    匹配|前或者后的内容14 ()    匹配括号内的表达式,也表示一个组

示例如下:

 1 print(re.findall('.','love_u 520')) #['l', 'o', 'v', 'e', '_', 'u', ' ', '5', '2', '0'] 2 print(re.findall('\w','love_u 520')) #['l', 'o', 'v', 'e', '_', 'u', '5', '2', '0'] 3 print(re.findall('\s','love_u 520')) #[' '] 4 print(re.findall('\d','love_u 520')) #['5', '2', '0'] 5 print(re.findall('\n','love_u 520')) #[] 6 print(re.findall('\b','love_u 520')) #[] 7 print(re.findall('^l','love_u 520')) #['l'] 8 print(re.findall('520$','love_u 520'))#['520'] 9 print(re.findall('\W','love_u 520')) #[' ']10 print(re.findall('\D','love_u 520')) #['l', 'o', 'v', 'e', '_', 'u', ' ']11 print(re.findall('\S','love_u 520')) #['l', 'o', 'v', 'e', '_', 'u', '5', '2', '0']12 print(re.findall('love|u','love_u 520')) #['love', 'u']

量词:

1 *   重复零次或者多次2 +  重复1次或者多次3 ?  重复零次或者一次4 {n}  重复n次5 {n,}  重复n次或者更多次6 {n,m}  重复n到m次

示例如下:

1 print(re.findall('5*','555 5')) #['555', '', '5', '']2 print(re.findall('5+','555 5')) #['555', '5']3 print(re.findall('5?','555 5')) #['5', '5', '5', '', '5', '']4 print(re.findall('5{2,3}','555 5')) #['555']5 print(re.findall('5{2}','555 5')) #['55']6 print(re.findall('5{3}','555 5')) #['555']

三、常见的正则表达式应用

1 手机号(国内):^[1-9][3478]\d{9}2 电话号(国内):[0-9-()()]{7,18}3 邮编:\d{6}4 QQ:[1-9]([0-9]{5,11})5 身份证号:\d{17}[\d|x]|\d{15}6 邮箱:\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}7 网址:^((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+8 日期:\d{4}(\-|\/|.)\d{1,2}\1\d{1,2}9 用户名:[A-Za-z0-9_\-\u4e00-\u9fa5]+

#正则表达式在线测试网址“http://tool.chinaz.com/regex/”

四、python中如何使用正则表达式

findall()方法:

此方法是在整个字符串中匹配指定字符或者字符串,并且将所有满足条件的结果返回到一个列表中,如下:

1 ret = re.findall('a','abac')2 print(ret)  #['a', 'a']
3 ret = re.findall('ab','abac')4 print(ret)  #['ab']

search()方法:

此方法是在整个字符串中查找满足匹配条件的字符或者字符串,一旦找到一个就不再继续查找,并返回包含查找值的对象,可以用.group()方法进行查看,如下:

1 ret = re.search('a','abac')2 print(ret.group())  #a

match()方法:

此方法是用来从开头位置查找是否满足匹配条件,如果没有就会返回None,如果有,则会返回一个包含查找值的对象,可以用group()方法进行查看,如下:

1 ret = re.match('a','abac')2 print(ret.group())  #a34 ret = re.match('b','abac')5 print(ret)  #None

split()方法:

此方法用来对一个字符串进行切分,如下:

1 ret = re.split('[ab]', 'abcd')  # 先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割2 print(ret)  # ['', '', 'cd']

sub()以及subn()方法:

1 ret = re.sub('\d', '*', 'a1b2c3')#将数字替换成'*',默认替换所有的数字2 print(ret) #a*b*c*34 ret = re.sub('\d', '*', 'a1b2c3', 1)#将数字替换成'*',参数1表示只替换1个5 print(ret) #a*b2c367 ret = re.subn('\d', '*', 'a1b2c3')#将数字替换成'*',返回一个元祖(替换后的字符串,替换的次数)8 print(ret) #('a*b*c*', 3)

compile()方法:

此方法是先把正则表达式编译好,以方便多次使用,如下:

1 obj = re.compile('\d{3}')  #将正则表达式编译成为一个 正则表达式对象,规则要匹配的是3个数字2 ret = obj.search('abc123eeee') #正则表达式对象调用search,参数为待匹配的字符串3 print(ret.group())  #结果 : 123
finditer()方法:
此方法与findall类似,只不过返回的不是一个列表,而是一个生产器,可以用next(iter).group()来查看里面的值,如下:
1 ret = re.finditer('\d', 'ds3sy4784a')   #finditer返回一个存放匹配结果的迭代器2 print(ret)  # <callable_iterator object at 0x10195f940>3 print(next(ret).group())  #查看第一个结果4 print(next(ret).group())  #查看第二个结果5 print([i.group() for i in ret])  #查看剩余的左右结果
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,487
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,903
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,736
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,487
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,127
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,289