# ### 正则表达式 # ###(二) 匹配多个字符 => [元字符] 量词符号 import re ‘‘‘1) ? 匹配0个或者1个a ‘‘‘ print(re.findall(‘a?b‘,‘abbzab abb aab‘)) ‘‘‘2) + 匹配1个或者多个a ‘‘‘ print(re.findall(‘a+b‘,‘b ab aaaaaab abb‘)) ‘‘‘3) * 匹配0个或者多个a ‘‘‘ print(re.findall(‘a*b‘,‘b ab aaaaaab abbbbbbb‘)) ‘‘‘4) {m,n} 匹配m个至n个a ‘‘‘ print(re.findall(‘a{1,3}b‘,‘aaab ab aab abbb aaz aabb aaaaaaaaaabb‘)) print(re.findall(‘a{1}b‘,‘aaab ab aab abbb aaz aabb aaaaaaaaaabb‘)) print(re.findall(‘a{1,}b‘,‘aaab ab aab abbb aaz aabb aaaaaaaaaabb‘)) # 贪婪匹配 与 非贪婪匹配 [语法:量词的后面加?号] """ 贪婪匹配: 默认向更多次数匹配 底层用的是回溯算法; 非贪婪匹配: 默认向更少次数匹配: 在量词的后面加上一个?号,就是非贪婪匹配 例如:.*? .?? .+? .{m,n}? .*?用的更多 如果遇到了子这个字,在非贪婪模式下,匹配到第一个就返回. 回溯算法: 从左向右进行匹配,一直向后找,直到再也找不到了,回头,拿离右侧最近的那个值 """ strvar = "刘能和刘铁锤和刘大棍子12313子" lst = re.findall("刘.",strvar) # 贪婪匹配 print(lst) lst = re.findall("刘.?",strvar) print(lst) lst = re.findall("刘.+",strvar) print(lst) lst = re.findall("刘.*",strvar) print(lst) lst = re.findall("刘.*子",strvar) print(lst) lst = re.findall("刘.{1,20}子",strvar) print(lst,"<==>") # 非贪婪匹配 strvar = "刘能和刘铁锤和刘大棍子12313子" lst = re.findall("刘.??",strvar) print(lst) lst = re.findall("刘.+?",strvar) print(lst) lst = re.findall("刘.*?",strvar) print(lst) # 匹配到第一个子就直接返回 lst = re.findall("刘.*?子",strvar) print(lst) lst = re.findall("刘.{1,20}?子",strvar) print(lst) # ###(三) 匹配开头结尾 => [元字符] 边界符号 """ \b 用来匹配边界 word 匹配d为右边界 d\b 匹配w为左边界\bw \b 退格 backspace 是一个转义字符 一般写正则表达式的时候,字符串的前面加上一个r,让转义字符失效, """ # 贪婪匹配 lst = re.findall(r".*d\b","word pwd abc") print(lst) # 非贪婪匹配 lst = re.findall(r".*?d\b","word pwd abc") print(lst) # 优化版:舍掉空格 lst = re.findall(r"\S*?d\b","word pwd abc") print(lst) # 匹配单词的左边界 lst = re.findall(r"\bw.* ","word abc") print(lst) """ ^ 必须以某个字符开头,后面的字符无所谓 $ 必须以某个字符结尾,前面的字符无所谓 如果正则里面包含了^或者$ 意味着要把字符串看成一个整体 """ 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 ‘)) print(re.findall(‘five$‘ , ‘aassfive‘)) print(re.findall(‘five$‘ , ‘aassfive00‘)) print(re.findall(‘^giveme$‘ , ‘giveme‘)) print(re.findall(‘^giveme$‘ , ‘givemeq‘)) print(re.findall(‘^giv.me$‘ , ‘giveme‘)) print(re.findall(‘^giveme$‘ , ‘giveme giveme‘)) print(re.findall(‘giveme‘ , ‘giveme giveme‘)) print(re.findall("^g.*e",‘giveme 1gfive gay‘))
原文:https://www.cnblogs.com/huangjiangyong/p/10924363.html