D21_2.1_正则表达式_多字符匹配
Posted banbosuiyue
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了D21_2.1_正则表达式_多字符匹配相关的知识,希望对你有一定的参考价值。
# (1) 量词基本语法
# 1) . 匹配1个除换行外的任意字符
# 2) ? 匹配0个或者1个a
# 3) + 匹配1个或者多个a
# 4) * 匹配0个或者多个a
# 5) {m,n} 匹配m个至n个a,n可以取到
# {m,} 至少m次
# {m} 必须m次
# (2)贪婪模式与非贪婪模式 (若不加?,匹配的时候默认为贪婪模式)
贪婪模式 : 默认向更多次匹配
非贪婪模式: 默认向更少次匹配
贪婪模式在底层使用的是回溯算法:
回溯算法:默认从左向右进行匹配,一直到最后,直到最后再也匹配不到了,回头,找最后一个能够匹配到的数据
非贪婪模式: 在量词的后面加?,这个语法就是非贪婪,默认向更少次匹配
.?? .+? .*? .{1,25}?
strvar = "刘能和刘德华和刘铁锤子777子888"
#贪婪模式
print(lst = re.findall("刘.",strvar) ) #刘能 刘德 刘铁
print(lst = re.findall("刘.?",strvar) ) #刘能 刘德 刘铁
print(lst = re.findall("刘.*",strvar) ) #[‘刘能和刘德华和刘铁锤子777子888‘]
#非贪婪模式
print(lst = re.findall("刘.??",strvar)) #[‘刘‘, ‘刘‘, ‘刘‘]
print(lst = re.findall("刘.*?",strvar)) #[‘刘‘, ‘刘‘, ‘刘‘]
# (3) 边界符
转义字符 : backspace 退格
边界符也用的是,要注意转义
例如:word 卡住边界
(1) 卡住左边界 w #取以某字符为开头
(2) 卡住右边界 d #取以某字符为结尾
strvar = "pwd word szf"
lst = re.findall(r"w.*",strvar) #[‘word szf‘]
lst = re.findall(r"w.*?",strvar) #[‘w‘]
lst = re.findall(r"w.*? ",strvar) #[‘word ‘]
lst = re.findall(r"d",strvar)
lst = re.findall(r".*d",strvar)
lst = re.findall(r".*?d",strvar) # [‘pwd‘, ‘ word‘]
# (4) ^ $
^ 以...开头
$ 以...结尾
如果正则表达式里面出现了^ $ ,代表把这个字符串看成一个整体,再去匹配
即如果这个字符串不是以^后面那个字符串为开头,不是以$前面那隔字符串为结尾,匹配出来的就是空
以上是关于D21_2.1_正则表达式_多字符匹配的主要内容,如果未能解决你的问题,请参考以下文章