在学习Python过程,对于分组与findall不太理解,所以归纳总结了一下,以下为本人python学习总结的一部分:
2.1 findall
查询到字符串,则返回全部字符的列表,否则返回空列表,参数与match一样
import re pattern = r'itcast' s = 'Itcaste,itcast1,itcast' match = re.findall(pattern,s,re.I) print(match)
2.2 Findall与分组
findall如果使用了分组,则输出的内容将是分组中的内容而非find到的结果,为了得到find到的结果,要加上问号来启用“不捕捉模式”
不启用分组:使用 \|
import re match = re.findall("(1\d+\|[a-z]+)","1234|asss|ZZZ|1345|adda") print(match) #输出:['1234|asss', '1345|adda']
不启用分组:使用 |
import re match = re.findall("(1\d+|[a-z]+)","1234|asss|ZZZ|1345|adda") print(match) #输出:['1234', 'asss', '1345', 'adda']
启用分组:使用 \|
import re
match = re.findall("(1\d+)\|([a-z]+)","1234|asss|ZZZ|1345|adda")
print(match)
[('1234', 'asss'), ('1345', 'adda')]
启用分组:使用 |
import re match = re.findall("(1\d+)|([a-z]+)","1234|asss|ZZZ|1345|adda") print(match) # 输出:[('1234', ''), ('', 'asss'), ('1345', ''), ('', 'adda')] # (1\d+)匹配到了,生成一个元组,([a-z]+)匹配到了生成一个元组,然后findall继续查找 # 元组中只有一个元素,那那么在后面需要添加一个dot逗号
findall如果使用了分组,则输出的内容将是分组中的内容(将匹配规则结果自动生成一个元组,最后的结果组合成一个列表)而非find到的结果,为了得到find到的结果,要加上问号来启用“不捕捉模式”
import re match = re.findall("(?:1\d+)|(?:[a-z]+)","1234|asss|ZZZ|1345|adda") print(match) ['1234', 'asss', '1345', 'adda']
结果与:match = re.findall("(1\d+|[a-z]+)","1234|asss|ZZZ|1345|adda") 一样
而findall+分组模式,可以与字典dict函数配合使用,将结果转为字典
import re match = re.findall("(1\d+)\|([a-z]+)","1234|asss|ZZZ|1345|adda") print(match) dict1 = dict(match) print(dict1)
#以下为程序结果:
[('1234', 'asss'), ('1345', 'adda')]
{'1345': 'adda', '1234': 'asss'}