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 如果希望匹配最少的字元 , 只需要在 *