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

Python正則表達(dá)式教程之三:貪婪/非貪婪特性

 更新時間:2017年03月02日 10:52:26   作者:一根笨茄子  
這篇文章主要介紹了Python正則表達(dá)式中貪婪/非貪婪特性的相關(guān)資料,文中通過示例代碼介紹的很詳細(xì),對大家具有一定的參考價值,需要的朋友下面來一起看看吧。

之前已經(jīng)簡單介紹了Python正則表達(dá)式的基礎(chǔ)捕獲,那么在這一篇文章里,我將總結(jié)一下正則表達(dá)式的貪婪/非貪婪特性。 

貪婪

默認(rèn)情況下,正則表達(dá)式將進(jìn)行貪婪匹配。所謂“貪婪”,其實就是在多種長度的匹配字符串中,選擇較長的那一個。例如,如下正則表達(dá)式本意是選出人物所說的話,但是卻由于“貪婪”特性,出現(xiàn)了匹配不當(dāng):

>>> sentence = """You said "why?" and I say "I don't know"."""
>>> re.findall(r'"(.*)"', sentence)
['why?" and I say "I don\'t know']

再比如,如下的幾個例子都說明了正則表達(dá)式“貪婪”的特性:

>>> re.findall('hi*', 'hiiiii')
['hiiiii']
>>> re.findall('hi{2,}', 'hiiiii')
['hiiiii']
>>> re.findall('hi{1,3}', 'hiiiii')
['hiii']

非貪婪

當(dāng)我們期望正則表達(dá)式“非貪婪”地進(jìn)行匹配時,需要通過語法明確說明: 

      {2,5}?    捕獲2-5次,但是優(yōu)先次數(shù)少的匹配

在這里,問號?可能會有些讓人犯暈,因為之前他已經(jīng)有了自己的含義:前面的匹配出現(xiàn)0次或1次。其實,只要記住,當(dāng)問號出現(xiàn)在表現(xiàn)不定次數(shù)的正則表達(dá)式部分之后時,就表示非貪婪匹配。 

還是上面的那幾個例子,用非貪婪匹配,則結(jié)果如下:

>>> re.findall('hi*?', 'hiiiii')
['h']
>>> re.findall('hi{2,}?', 'hiiiii')
['hii']
>>> re.findall('hi{1,3}?', 'hiiiii')
['hi']

另外一個例子中,使用非貪婪匹配,結(jié)果如下:

>>> sentence = """You said "why?" and I say "I don't know"."""
>>> re.findall(r'"(.*?)"', sentence)
['why?', "I don't know"]

捕獲與非貪婪

嚴(yán)格來說,這一部分并不是非貪婪特性。但是由于其行為與非貪婪類似,所以為了方便記憶,就將其放在一起了。 

      (?=abc) 捕獲,但不消耗字符,且匹配abc

      (?!abc) 捕獲,不消耗,且不匹配abc

在正則表達(dá)式匹配的過程中,其實存在“消耗字符”的過程,也就是說,一旦一個字符在匹配過程中被檢索(消耗)過,后面的匹配就不會再檢索這一字符了。 

知道這個特性有什么用呢?還是用例子說明。比如,我們想找出字符串中出現(xiàn)過1次以上的單詞:

>>> sentence = "Oh what a day, what a lovely day!"
>>> re.findall(r'\b(\w+)\b.*\b\1\b', sentence)
['what']

這樣的正則表達(dá)式顯然無法完成任務(wù)。為什么呢?原因就是,在第一個(\w+)匹配到what,并且其后的\1也匹配到第二個what的時候,“Oh what a day, what”這一段子串都已經(jīng)被正則表達(dá)式消耗了,所以之后的匹配,將直接從第二個what之后開始。自然地,這里只能找出一個出現(xiàn)了兩次的單詞。 

那么解決方案,就和上面提到的(?=abc)語法相關(guān)了。這樣的語法可以在分組匹配的同時,不消耗字符串!所以,正確的書寫方式應(yīng)該是:

>>> re.findall(r'\b(\w+)\b(?=.*\b\1\b)', sentence)
['what', 'a', 'day']

如果我們需要匹配一個至少包含兩個不同字母的單詞,則可以使用(?!abc)的語法:

>>> re.search(r'([a-z]).*(?!\1)[a-z]', 'aa', re.IGNORECASE)
>>> re.search(r'([a-z]).*(?!\1)[a-z]', 'ab', re.IGNORECASE)
<_sre.SRE_Match object; span=(0, 2), match='ab'>

總結(jié)

以上就是Python正則表達(dá)式中關(guān)于貪婪的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者使用python能能帶來一定的幫助,如果有疑問大家可以留言交流,如果有疑問大家可以留言交流。下一篇文章,我會繼續(xù)總結(jié)一下Python正則表達(dá)式re模塊的一些API的用法,請繼續(xù)關(guān)注腳本之家。

相關(guān)文章

  • Pytorch反向傳播中的細(xì)節(jié)-計算梯度時的默認(rèn)累加操作

    Pytorch反向傳播中的細(xì)節(jié)-計算梯度時的默認(rèn)累加操作

    這篇文章主要介紹了Pytorch反向傳播中的細(xì)節(jié)-計算梯度時的默認(rèn)累加操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 教你用Pygame制作簡單的貪吃蛇游戲

    教你用Pygame制作簡單的貪吃蛇游戲

    貪吃蛇(也叫做貪食蛇)游戲是一款休閑益智類游戲,既簡單又耐玩,唯一的目標(biāo)就是做這條gai上最長(pang)的蛇(zhu),這篇文章主要給大家介紹了關(guān)于如何使用Pygame制作簡單的貪吃蛇游戲的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • Python數(shù)據(jù)類型相互轉(zhuǎn)換

    Python數(shù)據(jù)類型相互轉(zhuǎn)換

    當(dāng)涉及數(shù)據(jù)類型轉(zhuǎn)換時,Python提供了多種內(nèi)置函數(shù)來執(zhí)行不同類型之間的轉(zhuǎn)換,本文主要介紹了Python數(shù)據(jù)類型相互轉(zhuǎn)換,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • Python如何實現(xiàn)讀取csv文件時忽略文件的編碼格式

    Python如何實現(xiàn)讀取csv文件時忽略文件的編碼格式

    我們再日常讀取csv文件的時候經(jīng)常會發(fā)現(xiàn)csv文件的格式有多種,所以這篇文章為大家介紹了Python如何實現(xiàn)讀取csv文件時忽略文件的編碼格式吧
    2025-03-03
  • Python+PyQT5的子線程更新UI界面的實例

    Python+PyQT5的子線程更新UI界面的實例

    今天小編就為大家分享一篇Python+PyQT5的子線程更新UI界面的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • 詳解python實現(xiàn)多張多格式圖片轉(zhuǎn)PDF并打包成exe

    詳解python實現(xiàn)多張多格式圖片轉(zhuǎn)PDF并打包成exe

    這篇文章主要為大家介紹了python實現(xiàn)多張多格式圖片轉(zhuǎn)PDF并打包成exe方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • python基礎(chǔ)中的文件對象詳解

    python基礎(chǔ)中的文件對象詳解

    這篇文章主要為大家介紹了python基礎(chǔ)中的文件對象,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Python數(shù)據(jù)處理利器Pandas?DataFrame常用操作

    Python數(shù)據(jù)處理利器Pandas?DataFrame常用操作

    這篇文章主要為大家介紹了Python數(shù)據(jù)處理利器Pandas?DataFrame,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Win10操作系統(tǒng)中PyTorch虛擬環(huán)境配置+PyCharm配置

    Win10操作系統(tǒng)中PyTorch虛擬環(huán)境配置+PyCharm配置

    本文主要介紹了Win10操作系統(tǒng)中PyTorch虛擬環(huán)境配置+PyCharm配置,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Python OpenCV機(jī)器學(xué)習(xí)之圖像識別詳解

    Python OpenCV機(jī)器學(xué)習(xí)之圖像識別詳解

    OpenCV中也提供了一些機(jī)器學(xué)習(xí)的方法,例如DNN等。本文將為大家詳細(xì)介紹一下OpenCV中利用機(jī)器學(xué)習(xí)實現(xiàn)的一些圖片識別功能:人臉識別、車牌識別等,感興趣的可以了解一下
    2022-01-01

最新評論

阿坝| 尼勒克县| 娱乐| 沧源| 凤翔县| 大厂| 团风县| 花垣县| 方山县| 华容县| 郧西县| 三河市| 宁河县| 南澳县| 波密县| 房产| 如皋市| 长阳| 滦南县| 扎赉特旗| 瑞金市| 翁源县| 平安县| 伊金霍洛旗| 常宁市| 环江| 石河子市| 晋中市| 唐海县| 盐津县| 格尔木市| 龙南县| 玛曲县| 米脂县| 额济纳旗| 富锦市| 克什克腾旗| 永嘉县| 肥西县| 莱州市| 平遥县|