正则表达式-精髓

'''re.match() 从头匹配 如果第一个字符串是h 就会匹配到, 反之则不会。'''
''' 不分组  只有group 得到结果'''
origin = 'hello alex bcd alex lge alex acd 19'
r = re.match('h\w+',origin)
print(r.group()) #获取匹配到的所有结果
print(r.groups()) #获取模型中匹配到的分组结果
print(r.groupdict()) #获取模型中匹配到的分组结果

''' 分组 加上‘括号’后 groups 就会得到结果 '''
origin = 'hello alex bcd alex lge alex acd 19'
r = re.match('h(\w+)',origin)
print(r.group()) #获取匹配到的所有结果
print(r.groups()) #获取模型中匹配到的分组结果
print(r.groupdict()) #获取模型中匹配到的分组结果

''' 分组 在括号里加上?P<keys>  P要大写 就会給元素匹配一个字典的值  groupdict 就会得到结果 '''
origin = 'hello alex bcd alex lge alex acd 19'
r = re.match("(?P<n1>h)(\w+)",origin)
print(r.group()) #获取匹配到的所有结果
print(r.groups()) #获取模型中匹配到的分组结果
print(r.groupdict()) #获取模型中匹配到的分组结果

'''re.search() 浏览全部字符串,匹配第一个符合规则的字符串    .* 匹配除换行符所有字符 '''
origin = 'hello alex bcd alex lge alex acd 19'
r = re.search("a(\w+).*(?P<name>\d)",origin)
print(r.group()) #获取匹配到的所有结果
print(r.groups()) #获取模型中匹配到的分组结果
print(r.groupdict()) #获取模型中匹配到的分组结果


'''re.findall() 将匹配到的所有内容都防止在一个列表中 从头开始匹配,如果匹配到,下次匹配从上次匹配的后面开始匹配。
    findall里面加?P<keys> 是不起作用的。只在group里面起作用 '''
r = re.findall('\d+\w\d','a2f2b32d2')
print(r)
origin = 'hello alex bcd alex lge alex acd 19'
r = re.findall('a(\w+)',origin)
print(r)


'''finditer 是一个迭代器,把寻找的字符都迭代在一起了,通过for 循环取值。可以group()  '''
origin = 'hello alex bcd alex lge alex acd 19'
r = re.finditer('a(\w+)(?P<n1>x)',origin)
print(r)
for i in r:
    print(i,i.group(),i.groups(),i.groupdict())

n = 'alex'
r = re.findall(r'(\w)(\w)(\w)(\w)',n)
print(r)
r = re.findall(r'(\w){4}',n)
print(r)


''' re.split() 对匹配对象进行分割,并且删除,一直匹配下去,直到匹配结束。后面加参数可指定匹配次数。'''
origin = 'helloalex bcdalex lgealex acd19'
r = re.split('(a\w+)',origin,1)
print(r)

''' re.sub() 找到匹配对象,对它进行替换。后面加参数可以控制替换次数。'''
origin = 'hello alex bcd alex lge alex acd 19'
r = re.sub('l','7',origin,1)
print(r)


''' re.subn() 找到匹配对象,对它进行替换。然后返还替换次数。后面加参数可以控制替换次数。'''
origin = 'hello alex bcd alex lge alex acd 19'
r,t= re.subn('l','7',origin,)
print(r,t)

  

posted @ 2016-12-27 10:18  200ML  阅读(275)  评论(1编辑  收藏  举报