博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
正则表达式(re模块)
阅读量:6432 次
发布时间:2019-06-23

本文共 3911 字,大约阅读时间需要 13 分钟。

s='hello world'print(s.find('llo'))         #找到lloret=s.replace('ll','xx')     #用xx代替llprint(ret)print(s.split('o'))          #用o分割字符串
通过以上例子可以看出,字符串提供的方法是完全匹配 正则表达式可以用来匹配字符串,可以进行模糊匹配,增加了灵活度
import reret=re.findall('w\w{2}l','hello world') #找到w开头,l结尾,中间两个字符任意的字符串print(ret)                              #findall找到所有满足条件的结果

一、元字符:(. ^ $ * + ? {} [] | () \)

1.通配符:.

ret=re.findall('w..l','hello world')   # .可以代表所有字符(除换行符外),一个点匹配一位print(ret)                             #找到w开头,l结尾,中间两个字符任意的字符串

2.尖角符:^ 只从开头匹配

ret=re.findall('^h...o','jiibhelloko')print(ret)

3.dollor符:$ 只从结尾匹配

ret=re.findall('h...o$','jiibhelhioko')print(ret)

4.星号:* 重复前面的字符(0到多次),可以重复普通字符,也可以重复元字符

ret=re.findall('a*','jiibaaaaoko')   #重复a 0到多次print(ret)ret=re.findall('a.*li','kiidalexkuulicvyf')  #重复点 0到多次print(ret)

5.加号:+ 重复前面的字符(1到多次),与*类似

ret=re.findall('a+b','jabgagbhiaaaaboko')       #重复a 1到多次print(ret)

6.问号:? 重复前面的字符(0次或1次)

ret=re.findall('a?ko','jahkoaaaaokojiako')print(ret)      #因为a重复0次或1次,所以此处代表找到ko或ako

7.大括号:{} 重复前面的字符(自定义次数)

ret=re.findall('a{4}hu','huaaaahuffg')       #重复a 4次print(ret)ret=re.findall('a{1,3}hu','ahudaaahufaahufg')       #重复a 1到3次print(ret)

8.字符集:[] 取消元字符的特殊功能(\ ^ - 除外)

ret=re.findall('a[chd]x','a,xadcadx')   #匹配三个中任意一个字符,c、h、d都可以print(ret)ret=re.findall('a[a-z]x','amxadcakx')       #匹配a-z的任意一个字符print(ret)ret=re.findall('w[,d*]l','w,,lewkljiw*lwdddl')    #匹配逗号/星号/d,此处*不再是对d的重复print(ret)ret=re.findall('w[^t,h]','wtwfwgwtwhwjfgtw,hu')   #中括号里,上尖号代表取反print(ret)                                        #此处匹配除t和h以外的其他字符

9.反斜杠:\

(I)反斜杠后边跟普通字符实现特殊功能:

(1) \d 匹配0-9的十进制数,相当于[0-9]

print(re.findall('\d{11}','fi159485526448521'))    #找到一个电话号码

(2) \D 匹配任何非数字字符,相当于[^0-9]

print(re.findall('\D{4}','fi159JIHGB6448521'))

(3) \s 匹配任何空白字符

print(re.findall('\sad','fiad94 ad1'))

(4) \S 匹配任何非空白字符

print(re.findall('\Sad','fiad94 ad1'))

(5) \w 匹配任何字母/数字字符,相当于[a-zA-Z0-9]

print(re.findall('\wad','fiad94 ad1K54ad'))

(6) \W 匹配任何非字母/数字字符,相当于[^a-zA-Z0-9]

print(re.findall('\Wad','fiad94 ad1K5.ad'))

(7) \b 匹配一个特殊字符

print(re.findall(r'\bI','I a.Im a LIST'))     #找出前面带特殊字符的Iprint(re.findall(r'I\b','I am a LISTI.P'))    #找出后面带特殊字符的I

(II)反斜杠后边跟特殊字符取消特殊功能:

ret = re.search('sb','hducbsbiudhsb')          #search只找到一个满足条件的结果print(ret)print(ret.group())ret=re.search('a\.','asda.dd').group()    #反斜杠使通配符失去意义,此处就代表字符 .print(ret)ret=re.search('a\+','aaasa+d').group()    #反斜杠使加号失去特殊意义,此处就代表字符 +print(ret)

(III)有时前面加'r'的原因及如何匹配反斜杠

re是一门独立的编程语言,pythdon的两个\\匹配re中的一个\,re是用前面的两个\\匹配后面的一个\(后面的一个顶两) 所以前面不加'r'时,是从python开始解释,4个匹配后面的一个;加'r'时,是从re开始解释,两个即可匹配后面的一个
ret=re.findall('\\\\','afef\c')print(ret)ret=re.findall(r'\\','af\ef\c')print(ret)ret=re.findall('\bblow','blow')         #不加r,从python开始解释,\b在python中也是特殊字符,匹配不到blowprint(ret)ret=re.findall(r'\bblow','blow')        #加r,从re开始解释,\b才能代表re中的特殊字符print(ret)

10.小括号:() 打包

print(re.search('(as)+','dfasdasasjha').group())  #as作为一个整体

11.竖杠:| 代表或者

print(re.findall('a|3','dfsds3k4'))print(re.findall('a|3','dfsads3k4'))

二、正则表达式例子

import reret=re.search('(?P
\d{3})/(?P
\w{3})','wdwds456/l5ffff') #(?P<>是一个固定格式,给匹配的内容起名字)print(ret.group()) #打印整体print(ret.group('id')) #通过名字打印部分print(ret.group('name'))

三、正则表达式的方法

1.findall(): 所有满足条件的结果都返回到一个列表里 2.search() : 返回匹配到的第一个对象,该对象可以调用group()查看结果 3.match():   只在字符串开头匹配
ret=re.match('asd','asddfasd')print(ret)print(ret.group()) #返回匹配到的第一个对象,该对象可以调用group()查看结果
4.split() 分割
ret=re.split('[j,s]','hzkjfsh,hg')    #先用j分,再用逗号分,再用s分print(ret)ret=re.split('[jh]','hzkjfsog')    #先用j分出'hzk'和'fsog',再用h分它两。边界上会分出空字符print(ret)
5.sub() 替换
ret=re.sub('a..x','skohhb','fdalexji')print(ret)
6.compile()
ret=re.findall('\.com','syeu.comjiijh')print(ret)obj=re.compile('\.com')           #匹配规则被编译成一个对象ret=obj.findall('syeu.comjiijh')  #直接用这个对象调用功能,只写字符串就行,不用再写匹配规则。print(ret)                        #当多次用到这样的匹配规则时,此法可以起到简化、省时作用

 

 
 
 
 

转载于:https://www.cnblogs.com/Finance-IT-gao/p/10439168.html

你可能感兴趣的文章
aix chfs及mklvcopy报错的解决方法
查看>>
取消新增的constraints
查看>>
MAC OS X 使用记录
查看>>
Azure 中使用 iPerf 进行网络带宽测试
查看>>
OPTIMIZE TABLE
查看>>
flask框架+pygal+sqlit3搭建图形化业务数据分析平台
查看>>
Fedora24下MySQL开发环境搭建
查看>>
shell实战训练营Day20
查看>>
jQuery 之 TAB切换菜单
查看>>
mysql 数据库集群搭建:(二)3台CentOS-7安装Percona-XtraDB-Cluster-57集群
查看>>
Jenkins实战演练之Windows系统节点管理
查看>>
MySQL高可用架构之MHA
查看>>
excel2013使用分列功能拆分数据
查看>>
如何玩转小程序+公众号?手把手教你JeeWx小程序CMS与公众号关联
查看>>
kibana平台增加安全认证
查看>>
1.8 nginx域名跳转
查看>>
PHP面向对象之接口编程
查看>>
使用 Docker Compose 管理多个容器实例
查看>>
ThinkPHP 删除数据记录 delete 方法
查看>>
Gradle学习笔记(二)--创建Java项目
查看>>