最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python 正則表達(dá)式貪婪模式與非貪婪模式原理、用法實(shí)例分析

 更新時間:2019年10月14日 11:34:07   作者:兩步一腳印  
這篇文章主要介紹了python 正則表達(dá)式貪婪模式與非貪婪模式原理、用法,結(jié)合實(shí)例形式詳細(xì)分析了python 正則表達(dá)式貪婪模式與非貪婪模式的功能、原理、用法及相關(guān)操作注意事項,需要的朋友可以參考下

本文實(shí)例講述了python 正則表達(dá)式貪婪模式與非貪婪模式原理、用法。分享給大家供大家參考,具體如下:

之前未接觸過正則表達(dá)式,今日看python網(wǎng)絡(luò)爬蟲的源碼,里面一行正則表達(dá)式匹配的代碼初看之下,不是很理解,代碼如下:

myItems = re.findall('<div.*?class="content".*?title="(.*?)">(.*?)</div>',unicodePage,re.S)

“.*?”這種匹配方式,按理解應(yīng)該是匹配任意字符0個或多個(re.S模式,“.”可以匹配“\n”),但是這個“?”總覺的在這兒是多余的,既然不理解,就敲代碼試試:

import re
patern = re.compile('www\..*')
match1 = patern.match("www.baidu.com")
if match1:
  print(match1.group())
else:
  print("match1 don't match")
#output
>>> ==================RESTART =============================
>>> 
www.baidu.com

這個結(jié)果,應(yīng)該說是意料之中,加個“?”呢?

import re
patern = re.compile('www\..*?')
match1 = patern.match("www.baidu.com")
if match1:
  print(match1.group())
else:
  print("match1 don't match")
#output
>>> ==================RESTART =============================
>>> 
www.

竟然是這個結(jié)果。。。“.?”一個字符都沒匹配,按“.”、“”、“?”的匹配理解,也就是“*”“?”均匹配前面字符0次,才會是這個結(jié)果,可是為啥就是0次了?

這就是正則表達(dá)式貪婪模式和非貪婪模式:

  • 貪婪模式,總是嘗試匹配盡可能多的字符;
  • 非貪婪模式則相反,總是嘗試匹配盡可能少的字符。

Python里數(shù)量詞默認(rèn)是貪婪的,這就解釋了第一個匹配實(shí)驗,輸出結(jié)果為”www.baidu.com”(貪婪模式),也就是說第二個匹配實(shí)驗是非貪婪模式,僅僅因為加了“?”,繼續(xù)實(shí)驗

import re
patern = re.compile('www\..?')
match1 = patern.match("www.baidu.com")
if match1:
  print(match1.group())
else:
  print("match1 don't match")
#output
>>> ==================RESTART =============================
>>> 
www.b

此次匹配結(jié)果,顯然是貪婪模式。奇怪了,也就是“?”的特殊組合才是非貪婪模式。

網(wǎng)上搜索得如下說明:

標(biāo)準(zhǔn)量詞修飾的子表達(dá)式,在可匹配可不匹配的情況下,總會先嘗試進(jìn)行匹配,稱這種方式為匹配優(yōu)先,或者貪婪模式。此前介紹的一些量詞,“{m}”、“{m,n}”、“{m,}”、“?”、“*”和“+”都是匹配優(yōu)先的。
一些NFA正則引擎支持忽略優(yōu)先量詞,也就是在標(biāo)準(zhǔn)量詞后加一個“?”,此時,在可匹配可不匹配的情況下,總會先忽略匹配,只有在由忽略優(yōu)先量詞修飾的子表達(dá)式,必須進(jìn)行匹配才能使整個表達(dá)式匹配成功時,才會進(jìn)行匹配,稱這種方式為忽略優(yōu)先,或者非貪婪模式。忽略優(yōu)先量詞包括“{m}?”、“{m,n}?”、“{m,}?”、“??”、“*?”和“+?”。

顯然“*?”的組合是非貪婪模式,猜想正確,原來如此啊。

PS:這里再為大家提供2款非常方便的正則表達(dá)式工具供大家參考使用:

JavaScript正則表達(dá)式在線測試工具:
http://tools.jb51.net/regex/javascript

正則表達(dá)式在線生成工具:
http://tools.jb51.net/regex/create_reg

更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python正則表達(dá)式用法總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設(shè)計有所幫助。

相關(guān)文章

  • Python實(shí)現(xiàn)兩種稀疏矩陣的最小二乘法

    Python實(shí)現(xiàn)兩種稀疏矩陣的最小二乘法

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)的兩種稀疏矩陣最小二乘法lsqr和lsmr,前者是經(jīng)典算法,后者來自斯坦福優(yōu)化實(shí)驗室,據(jù)稱可以比lsqr更快收斂,感興趣的可以了解一下
    2023-02-02
  • Python隨機(jī)生成彩票號碼的方法

    Python隨機(jī)生成彩票號碼的方法

    這篇文章主要介紹了Python隨機(jī)生成彩票號碼的方法,涉及Python操作隨機(jī)數(shù)及字符串的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • Python實(shí)現(xiàn)自定義函數(shù)的5種常見形式分析

    Python實(shí)現(xiàn)自定義函數(shù)的5種常見形式分析

    這篇文章主要介紹了Python實(shí)現(xiàn)自定義函數(shù)的5種常見形式,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python自定義函數(shù)相關(guān)的參數(shù)、默認(rèn)值、隱函數(shù)等相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2018-06-06
  • Python 將字符串轉(zhuǎn)換為列表的7種方法匯總

    Python 將字符串轉(zhuǎn)換為列表的7種方法匯總

    這篇文章主要介紹了Python 將字符串轉(zhuǎn)換為列表的7種方法匯總,在本文中,我們將嘗試將給定的字符串轉(zhuǎn)換為列表,其中根據(jù)用戶的選擇,遇到空格或任何其他特殊字符,為此,我們在string中使用split()方法,需要的朋友可以參考下
    2023-11-11
  • pytorch安裝及環(huán)境配置的完整過程

    pytorch安裝及環(huán)境配置的完整過程

    這篇文章主要介紹了pytorch安裝及環(huán)境配置的完整過程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • python處理html轉(zhuǎn)義字符的方法詳解

    python處理html轉(zhuǎn)義字符的方法詳解

    這篇文章主要介紹了python處理html轉(zhuǎn)義字符的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python針對常見HTML轉(zhuǎn)義字符處理技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • python3.6使用tkinter實(shí)現(xiàn)彈跳小球游戲

    python3.6使用tkinter實(shí)現(xiàn)彈跳小球游戲

    這篇文章主要為大家詳細(xì)介紹了python3.6使用tkinter實(shí)現(xiàn)彈跳小球游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • python數(shù)據(jù)類型可變與不可變深入分析

    python數(shù)據(jù)類型可變與不可變深入分析

    這篇文章主要為大家介紹了python數(shù)據(jù)類型可變與不可變深入分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Python實(shí)現(xiàn)的二維碼生成小軟件

    Python實(shí)現(xiàn)的二維碼生成小軟件

    這篇文章主要介紹了Python實(shí)現(xiàn)的二維碼生成小軟件,使用wxPython、python-qrcode、pyqrcode、pyqrnative等技術(shù)和開源類庫實(shí)現(xiàn),需要的朋友可以參考下
    2014-07-07
  • Python數(shù)據(jù)分析?Numpy?的使用方法

    Python數(shù)據(jù)分析?Numpy?的使用方法

    這篇文章主要介紹了Python數(shù)據(jù)分析?Numpy?的使用方法,Numpy?是一個Python擴(kuò)展庫,專門做科學(xué)計算,也是大部分Python科學(xué)計算庫的基礎(chǔ),關(guān)于其的使用方法,需要的小伙伴可以參考下面文章內(nèi)容
    2022-05-05

最新評論

涪陵区| 蒲城县| 黔西| 青河县| 虞城县| 突泉县| 浮山县| 新沂市| 集贤县| 东至县| 大连市| 遵化市| 株洲市| 万载县| 洪洞县| 古蔺县| 望谟县| 义乌市| 保德县| 陇川县| 齐河县| 遂平县| 南汇区| 克拉玛依市| 天镇县| 澄城县| 西乌珠穆沁旗| 诸城市| 翁牛特旗| 海丰县| 安远县| 磴口县| 那坡县| 克拉玛依市| 天台县| 九寨沟县| 五家渠市| 鱼台县| 红原县| 辽源市| 开江县|