1. 程式人生 > >python正則表示式的懶惰匹配和貪婪匹配

python正則表示式的懶惰匹配和貪婪匹配

第一次碰到這個問題的時候,確實不知道該怎麼辦,後來請教了一個大神,加上自己的理解,才瞭解是什麼意思,這個東西寫python的會經常用到,而且會特別頻繁,在此寫一篇部落格,希望可以幫到一些朋友。

例:一個字串 “abcdacsdnd”

    ①懶惰匹配

        regex = "a.*?d"

    ②貪婪匹配

        regex = "a.*d"

    測試程式碼:

# coding=UTF-8
import re

str = "abcdacsdn"
print("原始字串  " + str)

# 懶惰匹配
regexL = "a.*?d"
print("懶惰匹配 = " + regexL)
regL = re.compile(regexL)
listL = re.findall(regL, 
str) print("懶惰匹配結果") print(listL) # 貪婪匹配 regexT = "a.*d" print("貪婪匹配 = " + regexT) regT = re.compile(regexT) listT = re.findall(regT, str) print("貪婪匹配結果") print(listT)

測試結果:

    

    結果分析:

        懶惰匹配,匹配成功兩次,一次abcd,一次acsd,匹配到滿足條件的abcd就停止了此次匹配,不會干擾後面的繼續匹配。

        貪婪匹配,匹配成功一次,只有abcdacsd,匹配到字串後,會最大限度的佔用字串

    以上兩種,一個是儘量匹配最短串,一個是匹配最長串。

相關推薦

Python 是否存在前向貪婪匹配呢?

場景描述 由於專案的某一些應用場景出現瞭如下的需求: A: str = “ABCABABCABABC” B: 將其中ABC都摳出來  猛一看,這還不easy呢? 直接    ABC匹配不就出來了嗎? str = "ABCABABCABABC" res = re.fi

Python表示式處理中文中的匹配

由於中文使用2個位元組來表示一個字,在正則表示式中如果不進行轉換的話,編譯器是不能識別的,所以這裡簡要談一下正則表示式中遇到中文的問題。 關於python的re模組的基本用法,與各種正則表示式的基本形式,在之前的一篇文章中,進行過介紹,故此處不再贅述。 下面是一段對中文

python 表示式注意事項re.match()re.search()區別

首先,正則我們一般用到re.match()和re.search() 其中re.match()是從開始進行匹配的,re.search()是從中間開始匹配. 另外關於懶惰匹配的問題,需要懶惰的地方加"?

python表示式懶惰匹配貪婪匹配

第一次碰到這個問題的時候,確實不知道該怎麼辦,後來請教了一個大神,加上自己的理解,才瞭解是什麼意思,這個東西寫python的會經常用到,而且會特別頻繁,在此寫一篇部落格,希望可以幫到一些朋友。例:一個字串 “abcdacsdnd”    ①懶惰匹配        regex

表示式(re模組,匹配單個字元,匹配多個字元,匹配分組,python貪婪貪婪,r的作用)

re.match() 能夠匹配出以xxx開頭的字串 匹配單個字元 示例1: . #coding=utf-8 import re ret = re.match(".","M") print(ret.group()) ret = re.match("t.o","too") print

Python學習筆記模式匹配表示式之使用不使用表示式

 隨筆記錄方便自己和同路人查閱。 #------------------------------------------------我是可恥的分割線-------------------------------------------   假設你希望在字串中查詢電話號碼。你知道模式:3個數字,一

Python表示式貪婪模式貪婪模式

貪婪模式是把所有匹配的獲取到,非貪婪模式只取到第一個匹配到的字串,在python中findall和match的區別。 http://blog.csdn.net/qq_33447462/article/details/51485900 .*與.*?的區別:

Python表示式的簡單應用示例演示

前一陣子小編給大家連續分享了十篇關於Python正則表示式基礎的文章,感興趣的小夥伴可以點選連結進去檢視。今天小編給大家分享的是Python正則表示式的簡單應用和示例演示,將前面學習的Python正則表示式做一個概括。 下面的栗子是用於提取高考日期,一般來說,我們填寫日期都會寫2018年6月7日,但

表示式詳解(貪婪懶惰、前瞻與後顧、後向引用等)

之前嫌正則麻煩,一直沒有深入去了解過正則,能不用的地方就不使用。 最近專案中遇到了不可避免的正則使用,所以花了點時間去了解並整理了一下,理解不一定完全準確,如有不對歡迎指出,希望對大家有所幫助。 一、名詞解釋 首先我們瞭解幾個名詞:元字元 、 普通字元、列印字元、非列印字元、 限定符 、定位符、非列

python 表示式匹配特定浮點數

  def is_decimal(num): import re    #以數字開頭,小數點後保留1位數字或兩位數字或者沒有小數部分 dnumre = re.compile(r"""^[0-9]+(\.[0-9]{1,2})?$""") result = d

PYthon 表示式設定大小寫匹配

  在python中經常會需要區分大小寫,在此介紹一種最常用的設定方法: 一:確定要匹配的文字 text="[email protected],[email protected],[email protected]"   &

關於python表示式匹配分組的問題

在爬取網頁資訊時,我們不妨會用到Python正則表示式。之前一直沒有太明白關於正則表示式匹配分組的問題,今天終於搞清楚了,所以特意寫一下讓自己印象深刻。 myPage = requests.get(url).content.decode("gbk") 通過requests我們在網頁得到了這樣

第二章 python分散式爬蟲打造搜尋引擎環境搭建 第二節表示式的學習編寫練習

第一,正則表示式介紹 1. 為什麼必須會正則表示式?關於正則表達的詳細介紹可檢視一篇官網的技術文件!        正則表示式是一個特殊的字元序列,它能幫助你方便的檢查一個字串是否與某種模式匹配。正則表示式,又稱規則表示式,通常被用來檢索、替換那些符合

Python 表示式匹配中文

在python2.x中,匹配中文,首先要宣告utf8的編碼方式。 # coding:utf-8  其次,被匹配的字串一定要是utf8編碼: string = u'我是個好人。'  最後,正則表示式一定要是utf8編碼: pat = u'\u6211.

Python 表示式,search(不要求從開頭匹配),findall(匹配所有),sub(替換),split(切割)

match()從開頭匹配。 search()不要求從開頭匹配,只會匹配第一個。 findall()匹配所有,返回列表。 sub()替換匹配到的所有子串為指定內容,並返回整個字串。 split()切割字串,返回列表。   demo.py(search,不要求從開頭匹配

Python 表示式,re模組,match匹配(預設從開頭匹配),分組

  單個字元: 數量詞: 匹配開頭、結尾: 匹配分組:   demo.py(正則表示式,match從開頭匹配,分組,分組別名): # coding=utf-8 import re # 小括號()表示分組 \1表示取出第

Python表示式裡的單行re.S多行re.M模式

Python正則表示式裡的單行re.S和多行re.M模式   Python 的re模組內建函式幾乎都有一個flags引數,以位運算的方式將多個標誌位相加。其中有兩個模式:單行(re.DOTALL, 或者re.S)和多行(re.MULTILINE, 或者re.M)模式。它們初看上去不好理解,但是有

python表示式匹配分組的使用

正則表示式匹配分組等其他的情況 字元 功能 | 匹配左右任意一個表示式 (ab) 將括號中字元作為一個分組,可以和|一起使用(ab|cd)表示匹配括號內分組中的一個 \n

python表示式中文匹配

一般中文部分的unicode 值是4e00 - 9f5a, 但是要注意, 這是基本漢字編碼範圍, 還有一些擴充套件集, 後面介紹 下面例子標識我們要查詢一段字串中的漢字:import re s =

python表示式匹配優先順序

在python正則表示式中,預設是 匹配最多的字元,這是貪婪匹配,比如:  字串: abbbab     正則表示式: a.*b  得到的結果是 abbbab 如果希望匹配最少的字元 , 只需要在 *