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

浙公网安备 33010602011771号