python中正則表達(dá)式findall的用法實(shí)例
正則口徑:知道前后取中間,如果最后$結(jié)束
python中則這表達(dá)式的方法通常由re.match re.search re.findall
re.findall匹配的時(shí)候,會(huì)把結(jié)果放到list返回,如果沒(méi)有匹配到返回空l(shuí)ist不會(huì)報(bào)錯(cuò)
import re s1=re.compile('\d+') # 匹配數(shù)字 r1=s1.findall('sahduasu27bhsagd7236vbcsahg923') print(r1) s2=re.compile('\d+') r2=re.findall(s2, 'gashgddsh32hjsagd3jh4hjk234jkhk213') print (r2) r3=re.findall('\d+', 'sjdjsk1232kdsjf324string') print(r3) # 執(zhí)行結(jié)果 # ['27', '7236', '923'] # ['32', '3', '4', '234', '213'] # ['1232', '324']
示例及常用方式:
import re a = "hfdsakjhabsdgfjhabhjgdjabhjgajbkdkjdhfkaab" # 1.找出字符串中有多少個(gè)ab, 兩個(gè)字符挨著 r1= re.findall(r"ab", a) print(r1) # 繼續(xù)查找如ab, aab, aaab,aaaab這種,a可以重復(fù),也就是匹配前面的a是1個(gè)或多個(gè) # +是代表前面的字符出現(xiàn)1次或多次 r2= re.findall(r"a+b", a) print(r2) # *是代表匹配前面的字符出現(xiàn)0次或多次 r3= re.findall(r"a*b", a) print(r3) # 我們要匹配a和b之間有一個(gè)字符的,比如aab,abb,acb,adb都符合 # .就是匹配除 \n (換行符)以外的任意一個(gè)字符 r4= re.findall(r"a.b", a) print(r4) # 執(zhí)行結(jié)果: # ['ab', 'ab', 'ab', 'ab'] # ['ab', 'ab', 'ab', 'aab'] # ['ab', 'ab', 'ab', 'b', 'aab'] # ['ajb', 'aab']
貪婪與非貪婪:
import re # 符號(hào).* 貪婪,匹配從.*前面為開(kāi)始到后面為結(jié)束的所有內(nèi)容 a = "hfdsakjhabsdgfjhabhjgdjabhjgajbkdkjdhfkaabsdf" r1= re.findall(r"a.*b", a) print(r1) # 符號(hào).*? 非貪婪,遇到開(kāi)始和結(jié)束就進(jìn)行截取,因此截取多次符合的結(jié)果,中間沒(méi)有字符也會(huì)被截取 r2= re.findall(r"a.*?b", a) print(r2) # ['akjhabsdgfjhabhjgdjabhjgajbkdkjdhfkaab'] # ['akjhab', 'ab', 'ab', 'ajb', 'aab']
import re # # 符號(hào).* 貪婪,匹配從.*前面為開(kāi)始到后面為結(jié)束的所有內(nèi)容 a = "hfdsakjhabsdgfjhabhjgdjabhjgajbkdkjdhfkaabsdf" r1= re.findall(r"hfdsak.*?jgdj", a) print(r1) r2= re.findall(r"hfdsak(.*?)jgdj", a) print(r2) # ['hfdsakjhabsdgfjhabhjgdj'] # ['jhabsdgfjhabh'] # 看到區(qū)別了么,就是取出來(lái)的數(shù)據(jù)是否帶頭尾
re.S
前面匹配都是一整串沒(méi)有換行的情況,如果我們需要匹配的內(nèi)容,中間剛好有換行了,那就匹配不到了。
import re a = '''hfdsakjhabsdgfjhabhjgdj abhjgajbkdkjdhfkaabsdf''' r1= re.findall(r"hfdsak.*?kjdh", a) print(r1) # [] r2= re.findall(r"hfdsak(.*?)jgdj", a,flags=re.S) print(r2) # ['jhabsdgfjhabh']
正則表達(dá)式可以包含一些可選標(biāo)志修飾符來(lái)控制匹配的模式。修飾符被指定為一個(gè)可選的標(biāo)志。
修飾符 | 描述 |
---|---|
re.I | 使匹配對(duì)大小寫(xiě)不敏感 |
re.L | 做本地化識(shí)別(locale-aware)匹配 |
re.M | 多行匹配,影響 ^ 和 $ |
re.S | 使 . 匹配包括換行在內(nèi)的所有字符 |
re.U | 根據(jù)Unicode字符集解析字符。這個(gè)標(biāo)志影響 \w, \W, \b, \B. |
re.X | 該標(biāo)志通過(guò)給予你更靈活的格式以便你將正則表達(dá)式寫(xiě)得更易于理解。 |
多個(gè)標(biāo)志可以通過(guò)按位 OR(|) 它們來(lái)指定。如 re.I | re.M 被設(shè)置成 I 和 M 標(biāo)志
補(bǔ)充:實(shí)戰(zhàn)案例
如果上面的函數(shù)和參數(shù)含義都已經(jīng)掌握了,還需要進(jìn)一步通過(guò)案例加強(qiáng)理解,接下來(lái)舉例說(shuō)明上面的三個(gè)函數(shù):
# 導(dǎo)入用于正則表達(dá)式的re模塊 import re # 取出字符串string8中所有的天氣狀態(tài) string8 = "{ymd:'2018-01-01',tianqi:'晴',aqiInfo:'輕度污染'},{ymd:'2018-01-02',tianqi:'陰~小雨',aqiInfo:'優(yōu)'},{ymd:'2018-01-03',tianqi:'小雨~中雨',aqiInfo:'優(yōu)'},{ymd:'2018-01-04',tianqi:'中雨~小雨',aqiInfo:'優(yōu)'}" # 基于正則表達(dá)式使用findall函數(shù) print(re.findall("tianqi:'(.*?)'", string8)) # 取出string9中所有含O字母的單詞 string9 = 'Together, we discovered that a free market only thrives when there are rules to ensure competition and fair play, Our celebration of initiative and enterprise' # 基于正則表達(dá)式使用findall函數(shù) print(re.findall('w*ow*',string9, flags = re.I)) # 將string10中的標(biāo)點(diǎn)符號(hào)、數(shù)字和字母刪除 string10 = '據(jù)悉,這次發(fā)運(yùn)的4臺(tái)蒸汽冷凝罐屬于國(guó)際熱核聚變實(shí)驗(yàn)堆(ITER)項(xiàng)目的核二級(jí)壓力設(shè)備,先后完成了壓力試驗(yàn)、真空試驗(yàn)、氦氣檢漏試驗(yàn)、千斤頂試驗(yàn)、吊耳載荷試驗(yàn)、疊裝試驗(yàn)等驗(yàn)收試驗(yàn)。' # 基于正則表達(dá)式使用sub函數(shù) print(re.sub('[,。、a-zA-Z0-9()]','',string10)) # 將string11中的每個(gè)子部分內(nèi)容分割開(kāi) string11 = '2室2廳 | 101.62平 | 低區(qū)/7層 | 朝南 上海未來(lái) - 浦東 - 金楊 - 2005年建' # 基于正則表達(dá)式使用split函數(shù) split = re.split('[-| ]', string11) print(split) # 分割結(jié)果的清洗 split_strip = [i.strip() for i in split] print(split_strip) out: ['晴', '陰~小雨', '小雨~中雨', '中雨~小雨'] ['Together', 'discovered', 'only', 'to', 'competition', 'Our', 'celebration', 'of'] 據(jù)悉這次發(fā)運(yùn)的臺(tái)蒸汽冷凝罐屬于國(guó)際熱核聚變實(shí)驗(yàn)堆項(xiàng)目的核二級(jí)壓力設(shè)備先后完成了壓力試驗(yàn)真空試驗(yàn)氦氣檢漏試驗(yàn)千斤頂試驗(yàn)吊耳載荷試驗(yàn)疊裝試驗(yàn)等驗(yàn)收試驗(yàn) ['2室2廳 ', ' 101.62平 ', ' 低區(qū)/7層 ', ' 朝南 ', ' 上海未來(lái) ', ' 浦東 ', ' 金楊 ', ' 2005年建'] ['2室2廳', '101.62平', '低區(qū)/7層', '朝南', '上海未來(lái)', '浦東', '金楊', '2005年建']
如上結(jié)果所示:
第一個(gè)例子中通過(guò)正則表達(dá)式"tianqi:’(.*?)’“實(shí)現(xiàn)目標(biāo)數(shù)據(jù)的獲取,如果不使用括號(hào)的話,就會(huì)產(chǎn)生類(lèi)似"tianqi:‘晴’”, "tianqi:‘陰~小雨’"這樣的值,所以,加上括號(hào)就是為了分組,且僅返回組中的內(nèi)容;
第二個(gè)例子并沒(méi)有將正則表達(dá)式寫(xiě)入圓括號(hào),如果寫(xiě)上圓括號(hào)也是返回一樣的結(jié)果,所以findall就是用來(lái)返回滿(mǎn)足匹配條件的列表值,如果有括號(hào),就僅返回括號(hào)內(nèi)的匹配值;
第三個(gè)例子使用替換的方法,將所有的標(biāo)點(diǎn)符號(hào)換為空字符,進(jìn)而實(shí)現(xiàn)刪除的效果;
第四個(gè)例子是對(duì)字符串的分割,如果直接按照正則 ‘[,。、a-zA-Z0-9()]’ 分割的話,返回的結(jié)果中包含空字符,如 ‘2室2廳’ 后面就有一個(gè)空字符。為了刪除列表中每個(gè)元素的首尾空字符,使用了列表表達(dá)式,并且結(jié)合字符串的strip方法完成空字符的壓縮。
總結(jié)
到此這篇關(guān)于python中正則表達(dá)式findall用法的文章就介紹到這了,更多相關(guān)python正則表達(dá)式findall用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python辦公自動(dòng)化之定時(shí)郵件提醒和音視頻文件處理
這篇文章主要為大家詳細(xì)介紹了Python辦公自動(dòng)化中定時(shí)郵件提醒和音視頻文件處理的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),需要的小伙伴可以了解下2023-12-12Python編程產(chǎn)生非均勻隨機(jī)數(shù)的幾種方法代碼分享
這篇文章主要介紹了Python編程產(chǎn)生非均勻隨機(jī)數(shù)的幾種方法代碼分享,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12Python PyQt5實(shí)現(xiàn)拖放效果的原理詳解
這篇文章主要為大家詳細(xì)介紹了Python PyQt5中拖放效果的實(shí)現(xiàn)原理與實(shí)現(xiàn)代碼,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-11-11Mac中PyCharm配置Anaconda環(huán)境的方法
這篇文章主要介紹了Mac中PyCharm配置Anaconda環(huán)境的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03python的scrapy框架之Pipeline文件的用法詳解
這篇文章主要介紹了python的scrapy框架之Pipeline文件的用法詳解,Pipeline是一個(gè)獨(dú)立的模塊,用于處理從Spider中提取的Item對(duì)象,實(shí)現(xiàn)對(duì)數(shù)據(jù)的進(jìn)一步處理、存儲(chǔ)和清洗等操作,下面將詳細(xì)介紹Scrapy框架中Pipeline的用法,需要的朋友可以參考下2023-10-10在python中求分布函數(shù)相關(guān)的包實(shí)例
這篇文章主要介紹了在python中求分布函數(shù)相關(guān)的包實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04Tensorflow 同時(shí)載入多個(gè)模型的實(shí)例講解
今天小編就為大家分享一篇Tensorflow 同時(shí)載入多個(gè)模型的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07Python爬蟲(chóng)實(shí)現(xiàn)獲取動(dòng)態(tài)gif格式搞笑圖片的方法示例
這篇文章主要介紹了Python爬蟲(chóng)實(shí)現(xiàn)獲取動(dòng)態(tài)gif格式搞笑圖片的方法,結(jié)合實(shí)例形式分析了Python針對(duì)gif格式圖片的爬取、下載等相關(guān)操作技巧,需要的朋友可以參考下2018-12-12