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_正则表达式_多字符匹配的主要内容,如果未能解决你的问题,请参考以下文章

02020_正则表达式练习

关于正则表达式的一些基础知识

perl 正则表达式 匹配多行的问题

正则表达式不像预期的那么贪婪 /^(\d+)[^_]/

正则表达式的基础知识

D21_3.1匹配分组