1.量词符号(默认贪婪模式)
'''1) ? 匹配0个或者1个a '''
print(re.findall('a?b', 'abbzab abb aab')) # ab b ab ab b ab
'''2) + 匹配1个或者多个a '''
print(re.findall('a+b', 'b ab aaaaaab abb')) # ab aaaaaab ab
'''3) * 匹配0个或者多个a '''
print(re.findall('a*b', 'b ab aaaaaab abbbbbbb')) # b ab aaaaaab ab b b b b b b
'''4) {m,n} 匹配m个至n个a '''
# (1) 1 <= x <= 3
print(re.findall('a{1,3}b', 'aaab ab aab abbb aaz aabb')) # aaab ab aab ab aab
# (2) 前面修饰的a , 必须是2个字符
print(re.findall('a{2}b', 'aaab ab aab abbb aaz aabb')) # aab aab aab
# (3) 前面修饰的a , 至少是2个字符
print(re.findall('a{2,}b', 'aaab ab aab abbb aaz aabb')) # aaab aab aab
2.贪婪模式 与 非贪婪模式
贪婪模式 : 默认向更多次匹配,底层用的是回溯算法
非贪婪模式: 默认向更少次匹配,用一个?号来进行修饰(修饰在量词的身后)
回溯算法: 从左向右进行匹配,一直到最后,直接最后再也匹配不到了,回头,寻找最后一个
'.'匹配任意字符,除了换行符\n
strvar = "刘能和刘老根和刘铁棍子777子888"
lst = re.findall("刘.", strvar)
print(lst) # ['刘能', '刘老', '刘铁']
# 贪婪模式
lst = re.findall("刘.?", strvar)
print(lst) # ['刘能', '刘老', '刘铁']
lst = re.findall("刘.+", strvar)
print(lst) # ['刘能和刘老根和刘铁棍子777子888']
lst = re.findall("刘.*", strvar)
print(lst) # ['刘能和刘老根和刘铁棍子777子888']
lst = re.findall("刘.{1,21}", strvar)
print(lst) # ['刘能和刘老根和刘铁棍子777子888']
lst = re.findall("刘.*子", strvar)
print(lst) # ['刘能和刘老根和刘铁棍子777子']
# 非贪婪模式
lst = re.findall("刘.??", strvar)
print(lst) # ['刘', '刘', '刘']
lst = re.findall("刘.+?", strvar)
print(lst) # ['刘能', '刘老', '刘铁']
lst = re.findall("刘.*?", strvar)
print(lst) # ['刘', '刘', '刘']
lst = re.findall("刘.{1,21}?", strvar)
print(lst) # ['刘能', '刘老', '刘铁']
lst = re.findall("刘.*?子", strvar)
print(lst) # ['刘能和刘老根和刘铁棍子']
3.边界符 \b ^ $
\b backspace 本身就是一个转义字符
边界符 卡单词 word
卡住左边界 \bw
卡住右边界 d\b
strvar = "word pwd scf"
lst = re.findall(r".*d\b", strvar)
print(lst) # ['word pwd']
lst = re.findall(r".*?d\b", strvar)
print(lst) # ['word', ' pwd']
lst = re.findall(r"\bw.*", strvar)
print(lst) # ['w']
lst = re.findall(r"\bw.*?", strvar)
print(lst) # ['w']
# 正则表达式中写字符时,要谨慎,下面例子必须匹配到第一个空格时,才结束
lst = re.findall(r"\bw.*? ", strvar)
print(lst) # ['word ']
lst = re.findall(r"\bw\S*", strvar)
print(lst) # ['word']
4.边界符 \b ^ $
^ 必须以…开头
$ 必须以…结尾
如果出现了^ $ , 要把这个字符串看成一个整体
strvar = "大哥大嫂大爷"
print(re.findall('大.', strvar)) # ['大哥', '大嫂', '大爷']
print(re.findall('^大.', strvar)) # ['大哥']
print(re.findall('大.$', strvar)) # ['大爷']
print(re.findall('^大.$', strvar)) # []
print(re.findall('^大.*?$', strvar)) # ['大哥大嫂大爷']
print(re.findall('^大.*?大$', strvar)) # []
print(re.findall('^大.*?爷$', strvar)) # ['大哥大嫂大爷']
print(re.findall('^g.*? ', 'giveme 1gfive gay')) # ['giveme ']
print(re.findall('five$', 'aassfive')) # five
print(re.findall('^giveme$', 'giveme')) # giveme
print(re.findall('^giveme$', 'giveme giveme')) # []
print(re.findall('giveme', 'giveme giveme')) # ['giveme', 'giveme']
print(re.findall("^g.*e", 'giveme 1gfive gay')) # ['giveme 1gfive']