正則-re如何在python中使用?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
創(chuàng)新互聯(lián)致力于互聯(lián)網(wǎng)網(wǎng)站建設(shè)與網(wǎng)站營(yíng)銷,提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站開發(fā)、seo優(yōu)化、網(wǎng)站排名、互聯(lián)網(wǎng)營(yíng)銷、重慶小程序開發(fā)、公眾號(hào)商城、等建站開發(fā),創(chuàng)新互聯(lián)網(wǎng)站建設(shè)策劃專家,為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制解決方案,幫助客戶在新的全球化互聯(lián)網(wǎng)環(huán)境中保持優(yōu)勢(shì)。修飾符
?re.I 使匹配對(duì)大小寫不敏感
?re.L 做本地化識(shí)別匹配
?re.M 多行匹配,影響^和$
?re.S 使.匹配包括換行在內(nèi)的所有字符
?re.U 根據(jù)Unicode字符集解析字符.這個(gè)標(biāo)志影響\w \W \b \B
?re.X 該標(biāo)志通過給予你更靈活的格式以便你將正則表達(dá)式寫的更易于理解.
模式
?^ 匹配字符串開頭
?$ 匹配字符串結(jié)尾
?. 匹配人以字符,除了換行符號(hào).當(dāng)re.DOTAALL標(biāo)記被指定時(shí),則可以匹配包括換行符的任意字符.
?[...] 用來表示一組字符,單獨(dú)列出:[amk]匹配a,m或k
?[^...] 不在[]中的字符:[^amk]匹配除amk之外的字符
?re* 匹配0個(gè)或多個(gè)的表達(dá)式
?re+ 匹配1個(gè)或多個(gè)的表達(dá)式
?re? 匹配0個(gè)或1個(gè)由前面的正則表達(dá)式定義的片段,非貪婪方式.
?re{n} 精準(zhǔn)匹配n個(gè)前面表達(dá)式
?re{n,} 匹配大于等于n個(gè)前面表達(dá)式
?re{n,m} 匹配n到m個(gè)前面的表達(dá)式定義的片段,貪婪方式
?a|b 匹配a或b
?(re) 對(duì)正則表達(dá)式分組,并記住匹配的文本
?(?imx) 正則表達(dá)式包含三種可選標(biāo)志,imx,只影響括號(hào)中的區(qū)域.
?(?-imx) 正則表達(dá)式關(guān)閉imx可選標(biāo)志,只影響括號(hào)中的區(qū)域.
?(?:re) 類似(...)但不表示一個(gè)組
?(?imx:re) 在括號(hào)中使用imx可選標(biāo)志
?(?-imx:re) 在括號(hào)中不是用imx可選標(biāo)志
?(?#...) 注釋
?(?=re) 前向肯定界定符.如果所含正則表達(dá)式,以...表示,在當(dāng)前位置成功匹配時(shí)成功,否則失敗.但一旦所含表達(dá)式已經(jīng)嘗試,匹配引擎根本沒有提高,模式的剩余部分還要嘗試界定符右邊.
?(?!re) 前向否定界定符.與肯定界定符相反;當(dāng)所含的表達(dá)式不能在字符串當(dāng)前位置匹配成功時(shí)成功.
?(?>re) 匹配的獨(dú)立模式,省去回朔.
?\w 匹配字符數(shù)字以及下劃線
?\W 匹配非字母數(shù)字下劃線
?\s 匹配任意空白字符,等價(jià)于[\t\n\r\f]
?\S 匹配任意非空白字符
?\d 匹配任意數(shù)字
?\D 匹配任意非數(shù)字
?\A 匹配字符串開始
?\Z 匹配字符串結(jié)束,如果是存在換行,只匹配到換行前的結(jié)束字符串.
?\z 匹配字符串結(jié)束
?\G 匹配最后匹配完成的位置
?\b 匹配一個(gè)單詞邊界,也就是指單詞和空格之間的位置
?\B 匹配非單詞邊界
?\n \t 匹配一個(gè)換行符,一個(gè)制表符
?\1...\9 匹配第n個(gè)分組的內(nèi)容
上面這些呢,是我們會(huì)用到的一些模式,這里面絕大部分都是應(yīng)該熟記于心的。
接下來我們看re的一些方法:
re.compile
這個(gè)方法會(huì)生成一個(gè)正則對(duì)象,他的第一個(gè)參數(shù)是正則字符串,第二個(gè)參數(shù)是修飾符,就是 re.I, re.S 這些。
生成的這個(gè)正則對(duì)象呢,它還有一些方法,比如match、findall、finditer、search等等,這些方法的用法請(qǐng)往下看。
re.match
match方法是從給定字符串的開頭開始進(jìn)行匹配,并且只匹配一次。也就是說如果字符串和正則的第一個(gè)字母就對(duì)不上那就匹配失敗了。
ta的參數(shù)是pettern,string,flags
?pettern 就是正則字符串,如果是通過re.compile方法生成的正則對(duì)象.match來調(diào)用的話,就不需要這個(gè)參數(shù)了,因?yàn)檎齽t對(duì)象本身就代表了一個(gè)正則匹配模式。
?string 就是要進(jìn)行匹配的目標(biāo)字符串
?flags 就是正則的修飾符,比如 re.I
match 如果匹配失敗返回None,匹配懲罰返回的則是一個(gè)match對(duì)象。
match對(duì)象有一些方法,比較常用的有:span、group、groups等等
?span 方法返回的一個(gè)二元組,分別表示匹配字符串在目標(biāo)字符串中的起始下標(biāo)和結(jié)束下標(biāo)
?group 函數(shù)有一個(gè)int類型的參數(shù),參數(shù)為0表示返回正則匹配的字符串,參數(shù)為1返回正則中第一個(gè)組匹配的內(nèi)容,2返回第二組的內(nèi)容一次類推
?groups 函數(shù)是所有g(shù)roup函數(shù)結(jié)果組成一個(gè)元組。
re.search
search 函數(shù)和 match 函數(shù)是類似的,區(qū)別在于match方法是只在目標(biāo)函數(shù)開頭匹配一次;search函數(shù)是在整個(gè)目標(biāo)函數(shù)上匹配一次,一次匹配成功后不再進(jìn)行匹配。
同樣search方法返回的也是一個(gè)match對(duì)象,用法和match方法返回的結(jié)果一樣。
re.split
split 函數(shù)是用來分割字符串的一個(gè)函數(shù)。它的功能就是根據(jù)匹配的字符串對(duì)目標(biāo)字符串進(jìn)行分割,返回的結(jié)果是一個(gè)列表。
需要注意的是,如果正則中有組,組內(nèi)的字符在結(jié)果列表中也會(huì)保留,不是組內(nèi)的字符在結(jié)果列表中不會(huì)被保留。什么意思呢?通過一個(gè)例子來看一下:
st = 'www.baidu.com www.taobao.com' result = re.split('bai(du)', st) print(result)
結(jié)果:
['www.', 'du', '.com www.taobao.com']
可以看到,字符串‘du'是被括號(hào)括起來的,所以在結(jié)果中也有'du'這個(gè)元素,而'bai'沒有被括號(hào)括起來,在結(jié)果中就不會(huì)有‘bai'這個(gè)元素。
re.findall
這個(gè)函數(shù)是我在爬蟲項(xiàng)目中用的最多的一個(gè)函數(shù)了,它可以把所有匹配的結(jié)果以列表的形式返回,而不是像match和search一樣只匹配一個(gè)結(jié)果。我們來試一下:
st = 'www.baidu.com www.taobao.com' result = re.findall(r'www\.(\w*)\.(com)', st) print(result) [('baidu', 'com'), ('taobao', 'com')] re.finditer
這個(gè)函數(shù)和findall的功能一樣。不同之處在于這個(gè)函數(shù)返回的結(jié)果是一個(gè)生成器,而生成器中的每一項(xiàng)是一個(gè)match對(duì)象,我們一起來看一下:
st = 'www.baidu.com www.taobao.com' result = re.finditer(r'www\.(\w*)\.(com)', st) print(result.__next__().group(0, 1, 2)) print(next(result).groups(2)) ('www.baidu.com', 'baidu', 'com') ('taobao', 'com') re.sub
這個(gè)函數(shù)是用來替換字符串的。可以將匹配的字符串替換成指定的字符串,我們來看一下:
st = 'www.111.com www.222.com' result = re.sub(r'\d+', 'OK', st) print(result)
結(jié)果:
www.OK.com www.OK.com
我們的第二個(gè)參數(shù)除了可以是一個(gè)給定的字符串還可以是一個(gè)函數(shù):
def toOK(matched): value = matched.group() return str(int(value)*2) st = 'www.111.com www.222.com' result = re.sub(r'\d+', toOK, st) print(result)
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。
網(wǎng)頁標(biāo)題:正則-re如何在python中使用-創(chuàng)新互聯(lián)
文章分享:http://jinyejixie.com/article6/djsiog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷推廣、網(wǎng)站排名、搜索引擎優(yōu)化、響應(yīng)式網(wǎng)站、網(wǎng)站維護(hù)、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容