re模块
一、import re
二、findall方法、search方法、match方法
# findall # 返回所有满足匹配条件的结果,放在列表里,前面一个参数是正则,后面是待匹配字符串 #findall示例 ret=re.findall('[a-z]+','abnormol big %s please') print(ret) #返回 ['abnormol', 'big', 's', 'please'] 注意:#findall的分组优先 #优先匹配分组里面的,如果正则中有(),就只匹配()里面的,不是''里的 #?:取消分组优先 ret11=re.findall('abc.(\d|[a-z]).cn','abc.5.cn') print(ret11) #5 ret12=re.findall('abc.(?:\d|[a-z]).cn','abc.5.cn') print(ret12) #['abc.5.cn']
# search # 从前往后,找到一个就返回,返回的是结果的对象 # 需要.group才能获取结果,找不到就是返回None,调用group自然报错 # match # 和search用法相同,也需要group。找不到报错,返回None. # 从头开始匹配,且必须从头开始,如果正则从头开始就匹配上,那就返回一个变量 #search 示例 ret2=re.search('[z]','abnormol big %s please') print(ret2) #None if ret2: print(ret2.gruop) ret3=re.search('[ab]','abnormol big %s please') if ret3: print(ret3.group())
注意:#search和match 都有的关于group和分组的应用
1.根据顺序取分组
ret10=re.search('^[1-9](\d{14})(\d{2}[0-9x])?$','520202199910100236')
print(ret10.group())
print(ret10.group(1))
print(ret10.group(2))
# 520202199910100236
# 20202199910100 第一个括号括起来的分组,第二个括起来的分组
# 236
*****2.根据变量名取分组
re=search('\d(\w)+','awi3df3f4g5')
re=search('\d(?P<name>\w)+','adgtref23refs34trfd3')
print(re.gruop('name'))
三、split方法(切块)
ret4=re.split('[ab]','abcd') print(ret4)
#split:切片。先按a分割得到''和'bcd',再按b分割得到''和‘cd' #['', '', 'cd'] 注意:#split的分组优先,如果正则有分组,就是保留切割字符 ret13=re.split('\d+',"sad23es233s21sed") print(ret13) ret14=re.split('(\d+)',"sad23es233s21sed") print(ret14) # ['sad', 'es', 's', 'sed'] # ['sad', '23', 'es', '233', 's', '21', 'sed']
四、sub与subn方法
ret5=re.sub('\d','H','sre3454rfdxzrt4rfdcs2',1) #sub:将第一个数字替换成'H’,如果没有参数1就全部替换 print(ret5) #sreH454rfdxzrt4rfdcs2 ret6=re.subn('\d','H','sre3454rfdxzrt4rfdcs2') #subn:将数字替换成'H’,并且返回替换了几次 print(ret6) #('sreHHHHrfdxzrtHrfdcsH', 6)
五、其他(compile与finditer)
obj=re.compile('\d[a-z]') #compile:将正则表达式编译成为一个正则表达式对象,规则要匹配的是数字加小写字母 # 可以多次使用该正则 ret7=obj.search('saedtg1a2b') ret8=obj.search('s366edm9tg1a2b') print(ret7.group()) #1a print(ret8.group()) #6e
ret9=re.finditer('\d','asdf32edf34fss3d') print(ret9) print(next(ret9).group()) print(next(ret9).group()) print([i.group()for i in ret9])
#finditer:结果作为迭代器。迭代器中每一个元素都要使用.group才能拿到结果 print([i.group()for i in ret9]) # <callable_iterator object at 0x000002650C282240> 返回一个迭代器 # 3 # 2 # ['3', '4', '3'] # []