加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则-- | 多个字符匹配

发布时间:2020-12-14 05:59:20 所属栏目:百科 来源:网络整理
导读:# ### 正则表达式# ###(二) 匹配多个字符 = [元字符] 量词符号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) *
# ### 正则表达式
# ###(二) 匹配多个字符 => [元字符] 量词符号
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为右边界 db  匹配w为左边界bw
b 退格 backspace 是一个转义字符
一般写正则表达式的时候,字符串的前面加上一个r,让转义字符失效,"""
# 贪婪匹配
lst = re.findall(r".*db","word pwd abc")
print(lst)
# 非贪婪匹配
lst = re.findall(r".*?db","word pwd abc")
print(lst)
# 优化版:舍掉空格
lst = re.findall(r"S*?db","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‘))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读