本文主要介绍Python中正则表达式的详细讲解。正则表达式是Python高级学习的重要组成部分。有需要的朋友可以参考一下。
:
目录
1.正则表达式-元字符1。量词2。字符匹配3。边界匹配4。第五组。匹配模式参数2。方法re.findallre.matchgroup匹配对象re.searchre.compile 3。re.sub替换字符串摘要的检索和替换
一、正则表达式元字符
Re模块使Python语言具备了所有的正则表达式函数。
1. 数量词
#提取混合大写和小写字母的单词
进口re
a='Excel 12345Word23456PPT12Lr '
r=re.findall('[a-zA-Z]{3,5} ',a)
#抽取3到5的数字
打印(r)
# ['Excel ',' Word ',' PPT']
#贪婪和非贪婪[Python默认使用贪婪模式]
#贪婪:“[a-zA-Z]{3,5}”
#非贪婪:'[a-zA-Z]{3,5}?'或者“[a-zA-Z]{3}”
#建议用后者,但不是?没有,否则你会跟下面的?数字混乱
#匹配*号0次或无限次,且*号前的字符出现0次或无限次。
进口re
a=' excel 0 excel 3 excel 3 '
r=re.findall('excel* ',a)
r=re.findall('excel。*,a)#[' excel 3 excel 3 ']
# excel没有L,有很多L可以匹配。
打印(r)
#[' excel ',' excel ',' excel']
#匹配数字一次或无限次,数字前的字符至少出现一次。
进口re
a=' excel 0 excel 3 excel 3 '
r=re.findall('excel ',a)
打印(r)
#[' excel ',' excel']
#匹配0次还是1次?没有吗?数字常用来重复。
进口re
a=' excel 0 excel 3 excel 3 '
r=re.findall('excel?a)
打印(r)
#[' excel ',' excel ',' excel']
2. 字符匹配
line='xyz,xcz.xfc.xdz,xaz,xez,xec '
r=re.findall('x[de]z ',line)
# pattern以X开头,以Z结尾,包含D或e。
打印(r)
# ['xdz ',' xez']
r=re.findall('x[^de]z'线)
# pattern以X开头,以Z结尾,而不是以D或e结尾。
打印(r)
# ['xyz ',' xcz ',' xaz']
# \w您可以提取中文、英文、数字和下划线,但不能提取特殊字符。
进口re
a=' Excel 12345 word \ n 23456 _ PPT 12 lr '
r=re.findall('\w ',a)
打印(r)
# ['E ',' x ',' c ',' E ',' l ',' 1 ',' 2 ',' 3 ',' 4 ',' d ',' 2 ',' 3 ',' 4 ',' 5 ',' 6 ',' _ ',' P ',' P ',' T ',' 1 ',' 2 ',' l ',' r']
# \W提取特殊字符、空格\n \t
进口re
a=' Excel 12345 word \ n 23456 _ PPT 12 lr '
r=re.findall('\W ',a)
打印(r)
# [' ',' \n']
3. 边界匹配
#要提取的受限电话号码的位置必须是8-11位数字。
进口re
电话='13811115888 '
r=re.findall('^\d{8,11}$',tel)
打印(r)
# ['13811115888']
4. 组
#将abc分组为一组,{2}表示重复几次以匹配abcabc。
进口re
a='abcabcabcxyzabcabcxyzabc '
R=re.findall('(abc){2} ',a) #和
# ['abc ',' abc']
打印(r)
r=re.findall('(abc){3} ',a)
# ['abc']
5. 匹配模式参数
# findall第三个参数re。我忽略大小写。
进口re
a=' abcFBIabcCIAabc '
r=re.findall('fbi ',a,re。我)
打印(r)
# ['联邦调查局']
#多个模式由|连接。
进口re
a='美国联邦调查局'
r=re.findall('fbi。“{1}”,a,re。我| re。s)
#匹配fbi,然后匹配任何字符,包括\n
打印(r)
# ['FBI\n']
二、方法
re.findall
匹配字符串中与设定值相关的所有值。
以列表形式返回。
如果不匹配,则返回一个空列表。
进口re
re.findall(模式,字符串,标志=0)
pattern.findall(string[,pos[,endpos]])
进口re
Line=' 111aaabbb222小呼噜奥利奥'
r=re.findall('[0-9]',行)
打印(r)
# ['1', '1', '1', '2', '2', '2']
re.match
Re.match尝试从字符串的开头开始匹配一个模式。
如果起始位置匹配不成功,Match()返回none。
re.match(模式,字符串,标志=0)
#(标准,待匹配,标志位)
打印(重新匹配(' www ',' www.xxxx.com '))
print(re.match('www ',' www.xxxx.com ')。span())
打印(重新匹配(' com ',' www.xxxx.com '))
关于。匹配对象;span=(0,3),match='www '
(0, 3)
没有人
group匹配对象
进口re
a='人生苦短,我用python,我爱python '
r=re.search('life(。*)python(。*)python ',a)
Print(r.group(0)) #完全正则匹配,人生苦短,我用Python,我爱Python
Print(r.group(1)) #第一个数据包之间的值很短,我使用
print(r.group(2)) #第2个分组之间的取值,我爱
print(r.group(0,1,2)).以元组形式返回3个结果取值('人生短暂,我用python,我爱python ','短暂,我用',',我爱)
print(r.groups()) #返回就是组(1)和组(2)('短,我用',',我爱)
进口关于
# .* 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符
# (.*?)表示'非贪婪'模式,只保存第一个匹配到的子串
#回复M多行匹配,影响^ 和$
#回复。我使匹配对大小写不敏感
"猫比狗聪明"
match obj 1=re . match(r '(r .*)是(。*?) .*,行,环M|re .我)
match obj 2=re . match(r '(r .*)更聪明(。*?) .*,行,环M|re .我)
match obj 3=re . match(r '(r .*)比(。*)',行,回复.M|re .我)
打印(matchObj1)
打印(matchObj2)
打印(matchObj3)
#回复。匹配对象;span=(0,26),match='猫比狗聪明'
#回复。匹配对象;span=(0,26),match='猫比狗聪明'
#无
如果matchObj1:
print ('matchObj1.group():',matchObj1.group())
print ('matchObj1.group(1):',matchObj1.group(1))
print ('matchObj1.group(2):',matchObj1.group(2))
否则:
打印('不匹配!')
如果matchObj2:
print ('matchObj2.group():',matchObj2.group())
print ('matchObj2.group(1):',matchObj2.group(1))
print ('matchObj2.group(2):',matchObj2.group(2))
否则:
打印('不匹配!')
如果matchObj3:
print ('matchObj3.group():',matchObj3.group())
print ('matchObj3.group(1):',matchObj3.group(1))
print ('matchObj3.group(2):',matchObj3.group(2))
否则:
打印('不匹配!')
# matchObj1.group():猫比狗聪明
# matchObj1.group(1):猫
# matchObj1.group(2):更聪明
# matchObj2.group():猫比狗聪明
# matchObj2.group(1):猫是
# matchObj2.group(2) : than
# matchObj3.group():猫比狗聪明
# matchObj3.group(1):猫更聪明
# matchObj3.group(2):狗
进口关于
# 点是匹配单个字符
# 星是前面的东西出现0次或无数次
# 点星就是任意字符出现0次或无数次
str='a b a b '
matchObj1=re.match(r'a .*)b ',str,re .M|re .我)
matchObj2=re.match(r'a .*?)b ',str,re .M|re .我)
print('matchObj1.group():',matchObj1.group())
print('matchObj2.group():',matchObj2.group())
# matchObj1.group() : a b a b
# matchObj2.group() : a b
re.search
扫描整个字符串并返回第一个成功的匹配。
重新搜索(模式,字符串,标志=0)
进口关于
"猫比狗聪明"
matchObj=re.match(r'dogs ',line,re .M|re .我)
matchObj1=re.search(r'dogs ',line,re .M|re .我)
match obj 2=re . match(r '(r .*)狗,线,环M|re .我)
if matchObj:
print ('match - matchObj.group():',matchObj.group())
否则:
打印('不匹配!')
如果matchObj1:
print ('match - matchObj1.group():',matchObj1.group())
否则:
打印('不匹配!')
如果matchObj2:
print ('match - matchObj2.group():',matchObj2.group())
否则:
打印('不匹配!')
#不匹配!
# match - matchObj1.group() : dogs
# match - matchObj2.group():猫比狗聪明
re.compile
重新编译是将正则表达式转换为模式对象
这样可以更有效率匹配。使用编制转换一次之后,以后每次使用模式时就不用进行转换
三、检索和替换
re.sub 替换字符串
re.sub('被替换的','替换成的,a)
# 把联邦调查局替换成烧烤
进口关于
a=' abcFBIabcCIAabc '
r=re sub(' FBI ',' BBQ ',a)
打印(r)
# 把联邦调查局替换成烧烤,第四参数写1,证明只替换第一次,默认是0(无限替换)
进口关于
a=' abcFBIabcFBIaFBICIAabc '
r=re sub(' FBI ',' BBQ ',a,1)
打印(r)
# abcBBQabcCIAabc
# abcBBQabcFBIaFBICIAabc
# 把函数当参数传到潜水艇的列表里,实现把业务交给函数去处理,例如将联邦调查局替换成联邦调查局美元
进口关于
a=' abcFBIabcFBIaFBICIAabc '
极好的函数名(形参):
分段获取=形参group() # group()在正则表达式中用于获取分段截获的字符串,获取到联邦调查局
返回' $ '分段获取'$'
r=re sub(' FBI '),函数名,a)
打印(r)
总结
本文到此为止。希望能帮到你,也希望你能多关注我们的更多内容!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。