前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python正则表达式中的贪心模式和非贪心模式

Python正则表达式中的贪心模式和非贪心模式

作者头像
Python小屋屋主
发布2018-04-16 15:54:03
1.5K0
发布2018-04-16 15:54:03
举报
文章被收录于专栏:Python小屋Python小屋

声明:最近发现有人利用我在百度云盘里免费分享的127课Python视频盈利,并声称获得我的授权。在此,我声明,文末百度云盘里的Python视频是免费的,不会授权给任何人或机构进行销售。如果再发现有人卖这些视频,我将诉诸于法律对其进行严厉打击。

分割线========

正则表达式并不是Python独有的,而是一套独立的语法,很多编程语言都支持。不同语言中使用的正则表达式语法并不完全一样,但大体都是类似的。

之前已经推送过Python中使用正则表达式的一些例子,详见文末的相关阅读。本文重点介绍一下贪心模式和非贪心模式的用法和区别。在默认情况下,正则表达式是按照贪心模式去匹配的,也就是去匹配能够匹配到的尽可能多的内容。例如:

在上面的代码中,正则表达式中第一个\b表示匹配单词头,后面还有个字母b,表示匹配以字母b开头的单词,后面一个圆点.表示匹配任意字符(包括空格),然后加号+表示前面的任意字符出现一次或多次,最后一个\b表示匹配单词尾。那么问题来了,什么算是单词尾呢?空白字符和标点符号都算单词尾,但是正则表达式默认使用贪心模式,也就是匹配尽可能多的内容,所以上面的代码匹配到的文本中最后一个单词尾。如图:

那如何才能只匹配以字母b开始的单词而不是像上面这样子呢?可以使用非贪心模式。非贪心模式是使用问号“?”完成的,在正则表达式中,如果问号前面是普通字符或子模式,表示问号前面的字符或子模式可以出现也可以不出现。但是如果问号紧跟在+、*和{m,n}这样的内容后面,则表示非贪心模式,也就是匹配尽可能少的内容。以上面的问题为例,改为非贪心模式,例如:

下面的代码进一步演示了贪心模式和非贪心模式的区别:

当然,回到本文最初的问题,如果只是为了匹配以字母b开始的单词,是不用这么麻烦,直接使用\w就好了,因为\w只能匹配字母、数字或下划线,而不能匹配空格。例如:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档