美文网首页
Python 正则表达式(贪婪和非贪婪模式)- 匹配颜值美女图片

Python 正则表达式(贪婪和非贪婪模式)- 匹配颜值美女图片

作者: Devops海洋的渔夫 | 来源:发表于2018-12-23 15:33 被阅读9次

仅供学习,转载请注明出处

python贪婪和非贪婪

Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;

非贪婪则相反,总是尝试匹配尽可能少的字符。

在"*","?","+","{m,n}"后面加上?,使贪婪变成非贪婪。

# 尝试匹配一串数字,至匹配到了一个
In [110]: re.match(r"\d","123456768").group()                                        
Out[110]: '1'

# 增加了 + 号之后,就可以匹配多个了,此时可以算是贪婪模式
In [111]: re.match(r"\d+","123456768").group()                                       
Out[111]: '123456768'

# 那么想要变回非贪婪的话,只要增加一个?号即可
In [112]: re.match(r"\d+?","123456768").group()                                      
Out[112]: '1'

In [113]:   

In [113]: re.match(r"\d*","123456768").group()                                       
Out[113]: '123456768'

In [114]: re.match(r"\d*?","123456768").group()                                      
Out[114]: ''

In [115]:   

In [119]: re.match(r"\d{1,2}","123456768").group()                                   
Out[119]: '12'

In [120]: re.match(r"\d{1,2}?","123456768").group()                                  
Out[120]: '1'

In [121]:   

那么这个非贪婪模式到底有什么实际意义的用法吗?

下面实际应用一下。

斗鱼颜值直播间图片爬取示例

好啦,从页面的元素中,我们找到了一个美女直播的图片元素,这元素里面有两个url地址可以下载图片。

<img alt="小甜幂iu的直播" data-original="https://rpic.douyucdn.cn/live-cover/appCovers/2018/12/06/5582112_20181206194002_small.jpg" src="https://rpic.douyucdn.cn/live-cover/appCovers/2018/12/06/5582112_20181206194002_small.jpg" width="283" height="163" class="JS_listthumb" style="display: block; filter: none;">

匹配如下:

# 首先将内容写入字符串html中
In [121]: html=""" 
     ...: <img alt="小甜幂iu的直播" data-original="https://rpic.douyucdn.cn/live-cover
     ...: /appCovers/2018/12/06/5582112_20181206194002_small.jpg" src="https://rpic.do
     ...: uyucdn.cn/live-cover/appCovers/2018/12/06/5582112_20181206194002_small.jpg" 
     ...: width="283" height="163" class="JS_listthumb" style="display: block; filter:
     ...:  none;"> 
     ...: """                                                                         

# 使用findall方法,匹配找出http开头的内容
In [122]: re.findall(r"http.*",html)                                                  
Out[122]: ['https://rpic.douyucdn.cn/live-cover/appCovers/2018/12/06/5582112_20181206194002_small.jpg" src="https://rpic.douyucdn.cn/live-cover/appCovers/2018/12/06/5582112_20181206194002_small.jpg" width="283" height="163" class="JS_listthumb" style="display: block; filter: none;">']

# 增加匹配jpg结尾的内容,发现还是 .* 的部分匹配了太多内容了,例如把 src= 这类字符串也匹配了进来。
In [128]: re.findall(r"http.*jpg",html)                                                                                       
Out[128]: ['https://rpic.douyucdn.cn/live-cover/appCovers/2018/12/06/5582112_20181206194002_small.jpg" src="https://rpic.douyucdn.cn/live-cover/appCovers/2018/12/06/5582112_20181206194002_small.jpg']

# 此时就要设置未非贪婪,增加?
In [131]: re.findall(r"http.*?jpg",html)                                                                                      
Out[131]: 
['https://rpic.douyucdn.cn/live-cover/appCovers/2018/12/06/5582112_20181206194002_small.jpg',
 'https://rpic.douyucdn.cn/live-cover/appCovers/2018/12/06/5582112_20181206194002_small.jpg']

In [132]:   
# 好了,因为 .* 从原来的贪婪变为非贪婪,那么就只匹配了 http 到 jpg 的这串内容。
# 所以,出来的结果就是图片的url地址了。

关注微信公众号,回复【资料】、Python、PHP、JAVA、web,则可获得Python、PHP、JAVA、前端等视频资料。

相关文章

  • 正则表达式的贪婪模式和非贪婪模式

    一、什么是贪婪模式和非贪婪模式? 定义 贪婪模式:正则表达式趋向于匹配最大长度。 非贪婪模式:正则表达式趋向于匹配...

  • 正则表达式

    贪婪模式和非贪婪模式 正则表达式是贪婪匹配的。比如:'123456789'.replace(/\d{3,6}/g,...

  • Python 正则表达式(贪婪和非贪婪模式)- 匹配颜值美女图片

    仅供学习,转载请注明出处 python贪婪和非贪婪 Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪...

  • 正则表达式

    1.什么是贪婪模式和非贪婪模式? 贪婪模式 一般情况下,正则表达式在匹配过程中会尽可能多的匹配 非贪婪模式 让正则...

  • JavaScript 正则表达式( 匹配网页的图片地址)

    正则表达式 - 元字符 贪婪模式与非贪婪模式 贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为;贪婪模式 在...

  • 正则表达式

    1.什么是贪婪模式和非贪婪模式? 量词在默认下是尽可能多的匹配的,就是贪婪模式;非贪婪模式,让正则表达式尽可能少的...

  • 039 Python语法之正则表达式

    正则的基本语法 贪婪与非贪婪模式 Python中的数量词默认是贪婪模式的,总是默认尝试匹配更多的字符,非贪婪模式则...

  • 2018-06-21正则表达式练习

    所有的正则表达式默认贪婪模式,意思就是尽可能尝试匹配更多的字符。关闭贪婪模式之后,非贪婪模式是让匹配到的尽可能少;...

  • 正则表达式贪婪模式与非贪婪模式

    什么是正则表达式的贪婪模式和非贪婪模式? 我们先从例子入手: 原本想要匹配的字符为"witch"和"broom"两...

  • 爬虫的提取(2)--re正则

    python正则表达式基本元字符 贪婪模式在python中默认采用的是贪婪模式,使用非贪婪模式的话,只需要在量词后...

网友评论

      本文标题:Python 正则表达式(贪婪和非贪婪模式)- 匹配颜值美女图片

      本文链接:https://www.haomeiwen.com/subject/eccnkqtx.html