更多精彩內(nèi)容,歡迎關(guān)注:

視頻號(hào)
視頻號(hào)

抖音
抖音

快手
快手

微博
微博

Python常用的正則表達(dá)式處理函數(shù)詳解

導(dǎo)讀這篇文章主要介紹了Python常用的正則表達(dá)式處理函數(shù),正則表達(dá)式是一個(gè)特殊的字符序列,用于簡(jiǎn)潔表達(dá)一組字符串特征,檢查一個(gè)字符串是否與某種模式匹配,使用起來(lái)十分方便。本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值。

正則表達(dá)式是一個(gè)特殊的字符序列,用于簡(jiǎn)潔表達(dá)一組字符串特征,檢查一個(gè)字符串是否與某種模式匹配,使用起來(lái)十分方便。

在Python中,我們通過(guò)調(diào)用re庫(kù)來(lái)使用re模塊:

import re

下面介紹Python常用的正則表達(dá)式處理函數(shù)。

re.match函數(shù)

re.match 函數(shù)從字符串的起始位置匹配正則表達(dá)式,返回match對(duì)象,如果不是起始位置匹配成功的話,match()就返回None。

re.match(pattern, string, flags=0)

pattern:匹配的正則表達(dá)式。

string:待匹配的字符串。

flags:標(biāo)志位,用于控制正則表達(dá)式的匹配方式,如:是否區(qū)分大小寫(xiě),多行匹配等等。具體參數(shù)為:

re.I:忽略大小寫(xiě)。

re.L:表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴(lài)于當(dāng)前環(huán)境。

re.M:多行模式。

re.S:即 . ,并且包括換行符在內(nèi)的任意字符(. 不包括換行符)。

re.U:表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴(lài)于 Unicode 字符屬性數(shù)據(jù)庫(kù)。

re.X:為了增加可讀性,忽略空格和 # 后面的注釋。

import?re
#從起始位置匹配
r1=re.match('abc','abcdefghi')
print(r1)
#不從起始位置匹配
r2=re.match('def','abcdefghi')
print(r2)

運(yùn)行結(jié)果:

其中,span表示匹配成功的整個(gè)子串的索引。

使用group(num) 或 groups() 匹配對(duì)象函數(shù)來(lái)獲取匹配表達(dá)式。

group(num):匹配的整個(gè)表達(dá)式的字符串,group() 可以一次輸入多個(gè)組號(hào),這時(shí)它將返回一個(gè)包含那些組所對(duì)應(yīng)值的元組。

groups():返回一個(gè)包含所有小組字符串的元組,從 1 到 所含的小組號(hào)。

import?re

s='This?is?a?demo'
r1=re.match(r'(.*)?is?(.*)',s)
r2=re.match(r'(.*)?is?(.*?)',s)

print(r1.group())
print(r1.group(1))
print(r1.group(2))
print(r1.groups())
print()
print(r2.group())
print(r2.group(1))
print(r2.group(2))
print(r2.groups())

運(yùn)行結(jié)果:

上述代碼中的(.*)和(.*?)表示正則表達(dá)式的貪婪匹配與非貪婪匹配。

re.search函數(shù)

re.search函數(shù)掃描整個(gè)字符串并返回第一個(gè)成功的匹配,如果匹配成功則返回match對(duì)象,否則返回None。

re.search(pattern, string, flags=0)

pattern:匹配的正則表達(dá)式。

string:待匹配的字符串。

flags:標(biāo)志位,用于控制正則表達(dá)式的匹配方式,如:是否區(qū)分大小寫(xiě),多行匹配等等。

import?re
#從起始位置匹配
r1=re.search('abc','abcdefghi')
print(r1)
#不從起始位置匹配
r2=re.search('def','abcdefghi')
print(r2)

運(yùn)行結(jié)果:

使用group(num) 或 groups() 匹配對(duì)象函數(shù)來(lái)獲取匹配表達(dá)式。

group(num=0):匹配的整個(gè)表達(dá)式的字符串,group() 可以一次輸入多個(gè)組號(hào),這時(shí)它將返回一個(gè)包含那些組所對(duì)應(yīng)值的元組。

groups():返回一個(gè)包含所有小組字符串的元組,從 1 到 所含的小組號(hào)。

import?re

s='This?is?a?demo'
r1=re.search(r'(.*)?is?(.*)',s)
r2=re.search(r'(.*)?is?(.*?)',s)

print(r1.group())
print(r1.group(1))
print(r1.group(2))
print(r1.groups())
print()
print(r2.group())
print(r2.group(1))
print(r2.group(2))
print(r2.groups())

運(yùn)行結(jié)果:

從上面不難發(fā)現(xiàn)re.match與re.search的區(qū)別:re.match只匹配字符串的起始位置,只要起始位置不符合正則表達(dá)式就匹配失敗,而re.search是匹配整個(gè)字符串,直到找到一個(gè)匹配為止。

re.compile 函數(shù)

compile 函數(shù)用于編譯正則表達(dá)式,生成一個(gè)正則表達(dá)式對(duì)象,供 match() 和 search() 這兩個(gè)函數(shù)使用。

re.compile(pattern[, flags])

pattern:一個(gè)字符串形式的正則表達(dá)式。

flags:可選,表示匹配模式,比如忽略大小寫(xiě),多行模式等。

import?re
#匹配數(shù)字
r=re.compile(r'\d+')?
r1=r.match('This?is?a?demo')
r2=r.match('This?is?111?and?That?is?222',0,27)
r3=r.match('This?is?111?and?That?is?222',8,27)
?
print(r1)
print(r2)
print(r3)

運(yùn)行結(jié)果:

findall函數(shù)

搜索字符串,以列表形式返回正則表達(dá)式匹配的所有子串,如果沒(méi)有找到匹配的,則返回空列表。

需要注意的是,match 和 search 是匹配一次,而findall 匹配所有。

findall(string[, pos[, endpos]])

string:待匹配的字符串。

pos:可選參數(shù),指定字符串的起始位置,默認(rèn)為0。

endpos:可選參數(shù),指定字符串的結(jié)束位置,默認(rèn)為字符串的長(zhǎng)度。

import?re
#匹配數(shù)字
r=re.compile(r'\d+')?
r1=r.findall('This?is?a?demo')
r2=r.findall('This?is?111?and?That?is?222',0,11)
r3=r.findall('This?is?111?and?That?is?222',0,27)
?
print(r1)
print(r2)
print(r3)

運(yùn)行結(jié)果:

re.finditer函數(shù)

和 findall 類(lèi)似,在字符串中找到正則表達(dá)式所匹配的所有子串,并把它們作為一個(gè)迭代器返回。

re.finditer(pattern, string, flags=0)

pattern:匹配的正則表達(dá)式。

string:待匹配的字符串。

flags:標(biāo)志位,用于控制正則表達(dá)式的匹配方式,如是否區(qū)分大小寫(xiě),多行匹配等。

import?re?

r=re.finditer(r'\d+','This?is?111?and?That?is?222')
for?i?in?r:?
?print?(i.group())

運(yùn)行結(jié)果:

re.split函數(shù)

將一個(gè)字符串按照正則表達(dá)式匹配的子串進(jìn)行分割后,以列表形式返回。

re.split(pattern, string[, maxsplit=0, flags=0])

pattern:匹配的正則表達(dá)式。

string:待匹配的字符串。

maxsplit:分割次數(shù),maxsplit=1分割一次,默認(rèn)為0,不限次數(shù)。

flags:標(biāo)志位,用于控制正則表達(dá)式的匹配方式,如:是否區(qū)分大小寫(xiě),多行匹配等。

import?re?

r1=re.split('\W+','This?is?111?and?That?is?222')?
r2=re.split('\W+','This?is?111?and?That?is?222',maxsplit=1)?
r3=re.split('\d+','This?is?111?and?That?is?222')?
r4=re.split('\d+','This?is?111?and?That?is?222',maxsplit=1)?
print(r1)
print(r2)
print(r3)
print(r4)

運(yùn)行結(jié)果:

re.sub函數(shù)

re.sub函數(shù)用于替換字符串中的匹配項(xiàng)。

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

pattern:正則中的模式字符串。

repl:替換的字符串,也可為一個(gè)函數(shù)。

string:要被查找替換的原始字符串。

count:模式匹配后替換的最大次數(shù),默認(rèn)0表示替換所有的匹配。

import?re?

r='This?is?111?and?That?is?222'
#?刪除字符串中的數(shù)字
r1=re.sub(r'\d+','',r)
print(r1)
#?刪除非數(shù)字的字符串?
r2=re.sub(r'\D','',r)
print(r2)

運(yùn)行結(jié)果:

到此這篇關(guān)于Python常用的正則表達(dá)式處理函數(shù)詳解的文章就介紹到這了,希望大家以后多多支持好二三四!

為你推薦
資訊專(zhuān)欄
熱門(mén)視頻
相關(guān)推薦
一文秒懂python正則表達(dá)式常用函數(shù) python正則表達(dá)式語(yǔ)法學(xué)習(xí)筆記 Python 垃圾回收機(jī)制詳解 Python實(shí)現(xiàn)城市公交網(wǎng)絡(luò)分析與可視化 Python數(shù)據(jù)分析處理(三)--運(yùn)動(dòng)員信息的分組與聚合 基于Python實(shí)現(xiàn)PDF區(qū)域文本提取工具 詳解python的循環(huán) python實(shí)現(xiàn)新年倒計(jì)時(shí)實(shí)例代碼 Python實(shí)現(xiàn)消消樂(lè)小游戲 學(xué)習(xí)python的while循環(huán)嵌套 提升Python運(yùn)行速度的5個(gè)小技巧 Python按鍵或值對(duì)字典進(jìn)行排序 圖像檢索之基于vlfeat實(shí)現(xiàn)SIFT特征 python繪圖中的四個(gè)繪圖技巧 js中toString方法3個(gè)作用 信息系統(tǒng)項(xiàng)目管理師報(bào)考條件 信息系統(tǒng)項(xiàng)目管理師報(bào)考時(shí)間 信息系統(tǒng)項(xiàng)目管理師報(bào)名時(shí)間 信息系統(tǒng)項(xiàng)目管理師考試時(shí)間 pmp與信息系統(tǒng)項(xiàng)目管理師 JS截取字符串的三種方法詳解 PHP遍歷數(shù)組的6種方式總結(jié) php兩種基本的輸出方及實(shí)例詳解 php生成唯一uid的解決方法詳解 PHP7中對(duì)十六進(jìn)制字符串處理的問(wèn)題詳解 PHP對(duì)接抖音開(kāi)發(fā)平臺(tái)接口的詳細(xì)教程 php7安裝mysqli實(shí)例講解 php去掉一維數(shù)組的鍵值的實(shí)例方法 PHP中empty()和isset()的區(qū)別介紹 PHP實(shí)現(xiàn)JWT的Token登錄認(rèn)證 php判斷時(shí)間戳是否為今天實(shí)例講解 PHP7 preg_replace出錯(cuò)及解決辦法 五年班的學(xué)習(xí)計(jì)劃怎么寫(xiě) 五年級(jí)的學(xué)習(xí)計(jì)劃 初中新學(xué)期學(xué)習(xí)計(jì)劃怎么寫(xiě) 關(guān)于英語(yǔ)的學(xué)習(xí)計(jì)劃怎么寫(xiě) 怎么寫(xiě)暑假學(xué)習(xí)計(jì)劃書(shū) 4年級(jí)數(shù)學(xué)學(xué)習(xí)計(jì)劃怎么寫(xiě) 后半學(xué)期的學(xué)習(xí)計(jì)劃怎么寫(xiě) 上學(xué)期學(xué)習(xí)計(jì)劃怎么寫(xiě) 五年級(jí)的學(xué)習(xí)計(jì)劃書(shū)怎么寫(xiě)
Top