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'] # []

 

posted @ 2019-08-04 17:48  玉石非玉  阅读(143)  评论(0编辑  收藏  举报