欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python 正則表達式貪婪模式與非貪婪模式原理、用法實例分析

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

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

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

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

“.*?”這種匹配方式,按理解應該是匹配任意字符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

這個結果,應該說是意料之中,加個“?”呢?

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.

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

這就是正則表達式貪婪模式和非貪婪模式:

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

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

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

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

網上搜索得如下說明:

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

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

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

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

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

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

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

相關文章

  • Python pexpect模塊及shell腳本except原理解析

    Python pexpect模塊及shell腳本except原理解析

    這篇文章主要介紹了Python pexpect模塊及shell腳本except原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • Pandas.concat連接DataFrame,Series的示例代碼

    Pandas.concat連接DataFrame,Series的示例代碼

    本文主要介紹了Pandas.concat連接DataFrame,Series的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • pandas根據(jù)指定條件篩選數(shù)據(jù)的實現(xiàn)示例

    pandas根據(jù)指定條件篩選數(shù)據(jù)的實現(xiàn)示例

    條件篩選是pandas中非常重要的一個功能,它允許我們根據(jù)特定條件來快速、高效地篩選數(shù)據(jù),本文主要介紹了pandas根據(jù)指定條件篩選數(shù)據(jù)的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • python處理文本文件并生成指定格式的文件

    python處理文本文件并生成指定格式的文件

    本節(jié)主要介紹了python如何處理文本文件并生成指定格式的文件,需要的朋友可以參考下
    2014-07-07
  • tesseract-ocr使用以及訓練方法

    tesseract-ocr使用以及訓練方法

    這篇文章主要介紹了tesseract-ocr使用以及訓練方法,結合圖文形式詳細分析了tesseract-ocr基本功能、用法、樣本訓練與糾錯技巧,需要的朋友可以參考下
    2023-04-04
  • 利用python計算時間差(返回天數(shù))

    利用python計算時間差(返回天數(shù))

    這篇文章主要給大家介紹了關于如何利用python計算時間差(返回天數(shù))的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用python具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • tensorflow多維張量計算實例

    tensorflow多維張量計算實例

    今天小編就為大家分享一篇tensorflow多維張量計算實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python 解壓、復制、刪除 文件的實例代碼

    python 解壓、復制、刪除 文件的實例代碼

    這篇文章主要介紹了python 解壓、復制、刪除 文件的實例代碼,代碼簡單易懂非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • 如何在Python中使用pyecharts圖形畫可視化大屏

    如何在Python中使用pyecharts圖形畫可視化大屏

    最近碰巧需要用到pyecharts,pyecharts庫是一個用于生成echarts圖表的類庫,這篇文章主要給大家介紹了關于如何在Python中使用pyecharts圖形畫可視化大屏的相關資料,需要的朋友可以參考下
    2024-05-05
  • python數(shù)據(jù)分析數(shù)據(jù)標準化及離散化詳解

    python數(shù)據(jù)分析數(shù)據(jù)標準化及離散化詳解

    這篇文章主要為大家詳細介紹了python數(shù)據(jù)分析數(shù)據(jù)標準化及離散化,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02

最新評論