python 正则(拾遗)

1.match group,groups,groupdict 的区别

import re

# 无分组
stra ='abcdef ghijklmn'
match_obj = re.match('a\w+',stra) #从头开始匹配  \w 字母数字下划线
print(match_obj.group())  # abcdef  获取匹配到的所有结果
print(match_obj.groups()) #() 获取匹配结果的所有分组  以元组形式
print(match_obj.groupdict()) #{} 获取匹配结果的有kye的分组 以字典形式

#有分组
strb = 'abcdef ghijklmn'
match_obj = re.match('(a)\w+(?P<name>d)',strb)
print(match_obj.group()) # abcd  获取匹配的所有结果
print(match_obj.groups()) # ('a', 'd')  在所有结果中获取分组,以元组的形式
print(match_obj.groupdict()) # {'name': 'd'} 在所有结果中获取有Key的分组,以字典的形式

 2.search 与 match 差不多 ,区别如下

  search一个是整个字符串查找,返回第一次匹配的结果

  match 从开头开始匹配,开头不满足则返回空

3.贪婪字符 *,+, ?,{m,n}   这4个,在后面加上一个? 变成非贪婪模式

4.findall  相当于把search 的groups 添加到列表中

     有一个分组,和没有分组 情况是一样的,都是将匹配的结果放在列表中

            有多个分组,则把每一次匹配的结果放到元组中,把所有的元组放到列表中

            空匹配也会添加到list中,默认的多一个元素

n=re.findall(r'abc','abcabc')
print(n) #['abc', 'abc'] 没有分组
n=re.findall(r'(abc)','abcabc')
print(n) #['abc', 'abc'] 一个分组
n=re.findall(r'(a)b(c)','abcabc')
print(n) #[('a', 'c'), ('a', 'c')] 多个分组
n=re.findall(r'(abc)(abc)','abcabc')
print(n) # [('abc', 'abc')] 两个分组
n=re.findall(r'(abc)*','abcabc')
print(n)#  ['abc', ''] 只有一个分组,只显示一个,并且是最后一次匹配结果, '' 是空匹配
n=re.findall(r'','abcabc')
print(n)# ['', '', '', '', '', '', '']  python3 将空匹配也添加到列表

 5.匹配的顺序都是从左到右,从外到内,分组里面可以有分组

 6.finditer 返回一个可迭代的对象,里面每一个元素是match对象,== findall 列表中的每一个元组(groups) 

 7.split 没有分组的时候,将分割字符丢弃,其他的字符,添加到列表,有分组的时候,将分割字符保留,也添加到列表 , 匹配不到将原字符添加到列表

n = re.split('\d+','a1b2c3d')
print(n) # ['a', 'b', 'c', 'd']
n = re.split('(\d+)','a1b2c3d',2)
print(n) # ['a', '1', 'b', '2', 'c3d']

 8.sub ,替换某些字符串,subn 返回的是替换的结果和替换的次数,以元组的形式

n = re.sub('(\d+)','0','a1b2c3d',2)
print(n) # a0b0c3d
newstr,count = re.subn('(\d+)','0','a1b2c3d',2)
print(newstr,count) # a0b0c3d 2
posted @ 2017-04-25 15:30  1916  阅读(113)  评论(0)    收藏  举报