python 的正则表达式 贪婪模式与懒惰模式

正则表达式中用于表示匹配数量的元字符如下:
?   重复0次或1次,等同于{0,1}
*  重复0次或更多次,等同于{0,}
+  重复1次或更多次,等同于{1,}
{n,} 重复n次及以上
上面的表示匹配次数的元字符分为贪婪型和懒惰型2种类型。其表达式分别如下。
贪婪型      懒惰型
*     *?
+     +?
{n,}     {n,}?
贪婪型的匹配会去抓取满足匹配的最长的字符串,这个也是正则表达式的默认的模式。当我们不需要最长的匹配的时候就需要使用懒惰模式。
关于贪婪型和懒惰型的举例如下:
元字符'*'的贪婪模式 '*?'
1 >>> s="abcbd"
2 >>> patt=r'a.*b'   #*的贪婪类型
3 >>> re.search(patt,s).group()
4 'abcb' 
5 
6 >>> patt=r'a.*?b'  #*的懒惰类型
7 >>> re.search(patt,s).group()
8 'ab'
1 >>> s='caaaaab'
2 >>> patt=r'a.+b'  #+的贪婪类型
3 >>> s='caaaaabcccb'
4 >>> re.search(patt,s).group()
5 
6 >>> patt=r'a.+?b'   #+的懒惰类型
7 >>> re.search(patt,s).group()
8 'aaaaab' 

下面举例匹配html的例子,假如要匹配标签<li >和</li>之间的内容:

1 >>> s=r'my string is:<li>QQemail</li><li>Not read email</a></li>'
2 
3 >>> patt=r'<li>.*</li>'
4 >>> print re.search(patt,s).group()
5 <li>QQemail</li><li>Not read email</a></li> #贪婪类型,匹配多了
6 
7 >>> patt=r'<li>.*?</li>'
8 >>> print re.search(patt,s).group()
9 <li>QQemail</li>  #懒惰类型,匹配刚好
1 >>> print re.findall(patt,s)
2 ['<li>QQemail</li>',  '<li>Not read email</a></li>']

 

 

转载于:https://www.cnblogs.com/luckygwt/p/6565434.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值