亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python中正則表達(dá)式的巧妙使用一文包你必掌握正則

系統(tǒng) 1761 0

前言

正則表達(dá)式就是從字符串中發(fā)現(xiàn)規(guī)律,并通過(guò)“抽象”的符號(hào)表達(dá)出來(lái)。打個(gè)比方,對(duì)于2,5,10,17,26,37這樣的數(shù)字序列,如何計(jì)算第7個(gè)值,肯定要先找該序列的規(guī)律,然后用n2+1這個(gè)表達(dá)式來(lái)描述其規(guī)律,進(jìn)而得到第7個(gè)值為50。對(duì)于需要匹配的字符串來(lái)說(shuō),同樣把發(fā)現(xiàn)規(guī)律作為第一步,本文主要使用正則表達(dá)式完成字符串的查詢(xún)匹配、替換匹配和分割匹配。

Python中正則表達(dá)式的巧妙使用一文包你必掌握正則_第1張圖片

常用的正則符號(hào)

在進(jìn)入字符串的匹配之前,先來(lái)了解一下都有哪些常用的正則符號(hào),見(jiàn)下表所示:

Python中正則表達(dá)式的巧妙使用一文包你必掌握正則_第2張圖片

如果讀者能夠比較熟練地掌握上表中的內(nèi)容,相信在字符串處理過(guò)程中將會(huì)游刃有余。如前文所說(shuō),本節(jié)將基于正則表達(dá)式完成字符串的查詢(xún)、替換和分割操作,這些操作都需要導(dǎo)入re模塊,并使用如下介紹的幾個(gè)函數(shù)。

字符串的匹配查詢(xún)

re模塊中的findall函數(shù)可以對(duì)指定的字符串進(jìn)行遍歷匹配,獲取字符串中所有匹配的子串,并返回一個(gè)列表結(jié)果。該函數(shù)的參數(shù)含義如下:

findall(pattern, string, flags=0)

pattern:指定需要匹配的正則表達(dá)式。

string:指定待處理的字符串。

flags:指定匹配模式,常用的值可以是re.I、re.M、re.S和re.X。re.I的模式是讓正則表達(dá)式對(duì)大小寫(xiě)不敏感;re.M的模式是讓正則表達(dá)式可以多行匹配;re.S的模式指明正則符號(hào).可以匹配任意字符,包括換行符 ;re.X模式允許正則表達(dá)式可以寫(xiě)得更加詳細(xì),如多行表示、忽略空白字符、加入注釋等。

字符串的匹配替換

re模塊中的sub函數(shù)的功能是替換,類(lèi)似于字符串的replace方法,該函數(shù)根據(jù)正則表達(dá)式把滿(mǎn)足匹配的內(nèi)容替換為repl。該函數(shù)的參數(shù)含義如下:

sub(pattern, repl, string, count=0, flags=0)

pattern:同findall函數(shù)中的pattern。

repl:指定替換成的新值。

string:同findall函數(shù)中的string。

count:用于指定最多替換的次數(shù),默認(rèn)為全部替換。

flags:同findall函數(shù)中的flags。

字符串的匹配分割

re模塊中的split函數(shù)是將字符串按照指定的正則表達(dá)式分隔開(kāi),類(lèi)似于字符串的split方法。該函數(shù)的具體參數(shù)含義如下:

split(pattern, string, maxsplit=0, flags=0)

pattern:同findall函數(shù)中的pattern。

maxsplit:用于指定最大分割次數(shù),默認(rèn)為全部分割。

string:同findall函數(shù)中的string。

flags:同findall函數(shù)中的flags。

實(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é)

以上所述是小編給大家介紹的Python中正則表達(dá)式的巧妙使用一文包你必掌握正則,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 天天干天天在线 | 亚洲一区不卡视频 | 国产精品400部自产在线观看 | 久久国产精品老人性 | 国产男女xoxo在线视频 | 精品国产看高清国产毛片 | 看看的在线视频国产 | 四虎地址 | 经典国产乱子伦精品视频 | 91精品国产色综合久久不卡蜜 | 国产成人丝袜网站在线看 | 视色视频在线观看 | 精品久久不卡 | 欧美精品一区二区精品久久 | 伊人久久综合热青草 | 欧美ucjizz免费播放器 | 国产精品亚洲精品不卡 | 成年人天堂 | 中文字幕一区视频一线 | 国产精品美女www爽爽爽视频 | 青草青青在线观看免费视频 | www一级毛片 | 中国一级全黄的免费观看 | 九九免费精品视频在这里 | 久久久精品久久久久久 | 国产一区二区三区久久精品 | 日本一本一道 | 一区一区三区产品乱码 | 亚洲色视频在线播放网站 | 国产做人爱三级视频在线 | 国内欧美一区二区三区 | 欧美成人一区亚洲一区 | 久久精品国产999久久久 | 欧美精品亚洲 | 手机看片福利永久国产日韩 | 九九热视频在线观看 | 国产美女久久久久久久久久久 | 啪啪婷婷 | 欧美xxxx8888视频 | 中文字幕一区二区三 | 天天做天天爱天天爽综合网 |