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'
python正则表达式不包含下⾯举例匹配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>']
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论