關(guān)于Python正則表達(dá)式 findall函數(shù)問(wèn)題詳解
在寫(xiě)正則表達(dá)式的時(shí)候總會(huì)遇到不少的問(wèn)題, 特別是在表達(dá)式有多個(gè)元組的時(shí)候。下面看下re模塊下的findall()函數(shù)和多個(gè)表達(dá)式元組相遇的時(shí)候會(huì)出現(xiàn)什么樣的坑。
代碼如下:
import re str="a b c d" regex0=re.compile("((\w+)\s+\w+)") print(regex0.findall(str)) regex1=re.compile("(\w+)\s+\w+") print(regex1.findall(str)) regex2=re.compile("\w+\s+\w+") print(regex2.findall(str))
結(jié)果:
[('a b', 'a'), ('c d', 'c')] ['a', 'c'] ['a b', 'c d']
可能結(jié)果有點(diǎn)意外,下面解釋一下
第一個(gè)正則表達(dá)式中是帶有2個(gè)括號(hào)的,我們可以看到其輸出是一個(gè)list 中包含2個(gè) tuple
第二個(gè)正則表達(dá)式中帶有1個(gè)括號(hào),其輸出的內(nèi)容就是括號(hào)匹配到的內(nèi)容,而不是整個(gè)表達(dá)式所匹配到的結(jié)果。
第三個(gè)正則表達(dá)式中不帶有括號(hào),其輸出的內(nèi)容就是整個(gè)表達(dá)式所匹配到的內(nèi)容。
結(jié)論:findall()返回的是括號(hào)所匹配到的結(jié)果(如regex1),多個(gè)括號(hào)就會(huì)返回多個(gè)括號(hào)分別匹配到的結(jié)果(如regex),如果沒(méi)有括號(hào)就返回就返回整條語(yǔ)句所匹配到的結(jié)果(如regex2)。所以在提取數(shù)據(jù)的時(shí)候就需要注意這個(gè)坑。
實(shí)際上是由其并不是python特有的,這是 正則 所特有的 , 任何一門(mén)高級(jí)語(yǔ)言使用正則都滿(mǎn)足這個(gè)特點(diǎn):有括號(hào)時(shí)只能匹配到括號(hào)中的內(nèi)容,沒(méi)有括號(hào)【相當(dāng)于在最外層增加了一個(gè)括號(hào)】。在正則里面 “()” 代表的是分組的意思,一個(gè)括號(hào)代表一個(gè)分組,你只能匹配到"()"中的內(nèi)容
相關(guān)文章
python實(shí)現(xiàn)京東訂單推送到測(cè)試環(huán)境,提供便利操作示例
這篇文章主要介紹了python實(shí)現(xiàn)京東訂單推送到測(cè)試環(huán)境,提供便利操作,涉及Python基于requests模塊的網(wǎng)絡(luò)請(qǐng)求操作相關(guān)使用技巧,需要的朋友可以參考下2019-08-08Python使用Django實(shí)現(xiàn)博客系統(tǒng)完整版
這篇文章主要為大家詳細(xì)介紹了Python利用Django完整的開(kāi)發(fā)一個(gè)博客系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03基于Python實(shí)現(xiàn)PDF區(qū)域文本提取工具
這篇文章主要為大家介紹了如何通過(guò)Python實(shí)現(xiàn)一個(gè)非常精簡(jiǎn)的圖像化的PDF區(qū)域選擇提取工具,文中示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下2021-12-12Python學(xué)習(xí)之函數(shù)的定義與使用詳解
函數(shù)是具有某種特定功能的代碼塊,可以重復(fù)使用(在前面數(shù)據(jù)類(lèi)型相關(guān)章節(jié)。它使得我們的程序更加模塊化,不需要編寫(xiě)大量重復(fù)的代碼。本文將詳細(xì)介紹Python中函數(shù)的定義與使用,感興趣的可以學(xué)習(xí)一下2022-03-03python deque模塊簡(jiǎn)單使用代碼實(shí)例
這篇文章主要介紹了python deque模塊簡(jiǎn)單使用代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03Python實(shí)現(xiàn)獲取系統(tǒng)臨時(shí)目錄及臨時(shí)文件的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)獲取系統(tǒng)臨時(shí)目錄及臨時(shí)文件的方法,結(jié)合實(shí)例形式分析了Python文件與目錄操作相關(guān)函數(shù)與使用技巧,需要的朋友可以參考下2019-06-06Django中QuerySet查詢(xún)優(yōu)化之prefetch_related詳解
prefetch_related()和select_related()的設(shè)計(jì)目的很相似,都是為了減少SQL查詢(xún)的數(shù)量,但是實(shí)現(xiàn)的方式不一樣,下面這篇文章主要給大家介紹了關(guān)于Django中QuerySet查詢(xún)優(yōu)化之prefetch_related的相關(guān)資料,需要的朋友可以參考下2022-11-11python正則爬取某段子網(wǎng)站前20頁(yè)段子(request庫(kù))過(guò)程解析
這篇文章主要介紹了python正則爬取某段子網(wǎng)站前20頁(yè)段子(request庫(kù))過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08Python Matplotlib繪制箱線(xiàn)圖的全過(guò)程
又稱(chēng)箱形圖(boxplot)或盒式圖,數(shù)據(jù)大小、占比、趨勢(shì)等等的呈現(xiàn)其包含一些統(tǒng)計(jì)學(xué)的均值、分位數(shù)、極值等等統(tǒng)計(jì)量,因此該圖信息量較大,下面這篇文章主要給大家介紹了關(guān)于Python Matplotlib繪制箱線(xiàn)圖的相關(guān)資料,需要的朋友可以參考下2021-09-09