正則的基本操作(Python)

正則的part3:主要操作(python)

3.1 生成正則表達式對象(compile)

re.compile(pattern,flag=0)#原生代碼

這個compile方法實際上是生成一個與pattern對應(yīng)的正則表達式對象,以便于在以后的檢索、匹配分割登操作時重復(fù)生成,flag在這里沒有什么特別的作用,下面我們就不討論了。以下是操作示例

#其中r1的pattern為正則表達式‘1[2-9]{2}',一集即匹配第一個數(shù)字為1,后兩個數(shù)字為2到9的字符串例如‘123'
r2 = re.compile('hello')
print(r1)
#輸出re.compile('1[2-9]{2}')
print(type(r1))
print(r2)
#輸出re.compile('hello')
print(type(r2))
#輸出<class '_sre.SRE_Pattern'>

看起來還是有點難以理解對吧?沒關(guān)系我們把這個正則表達式對象應(yīng)用下去!

3.2 檢索(search)

re.search(pattern,string)

這個方法是在string中檢索是否有與pattern對應(yīng)的子串,如果有則返回一個match'類型的對象,沒有則返回none,現(xiàn)在我們來結(jié)合上面的compile方法進行示例演示,

r3 = re.search(r1,'abc123asd789')
print(r3)#輸出<_sre.SRE_Match object; span=(3, 6), match='123'>
r4 = re.search(r2,'abc123asd789')
print(r4)#輸出None,因為‘a(chǎn)bc123asd789'中并沒有hello
r5 = re.search(r2,'4we78hello23')
print(r5)#輸出<_sre.SRE_Match object; span=(5, 10), match='hello'>

根據(jù)以上的方法演示,我們可以得出,如果string中有pattern匹配的子串,那么search方法將會返回一個match對象,其中會給出string中與pattern匹配的子串的下標,并且給出匹配的具體內(nèi)容。如果沒有,則會返回None值,此類對象也可以用于邏輯判斷,判斷string中是否有pattern匹配的子串等。

3.3 匹配(match)

re.match(pattern,string)

前面我們講到了match對象,與match方法有一點點區(qū)別,match方法是檢查,string中是否存在一個與pattern匹配的前綴,有則返回一個match對象,沒有則返回None,我們采用示例來說明:

r6 = re.match(r1,'abc123asd189')
r7 = re.match(r1,'1239abc178123')
print(r6)#輸出None
print(r7)#輸出<_sre.SRE_Match object; span=(0, 3), match='123'>

可以看出,盡管字符串 ‘a(chǎn)bc123asd189’和‘1239abc178123'中都有與r1匹配的子串,但是只有字符串‘123’是'1239abc178123'的前綴,所以只有r7輸出了一個match對象

3.4分割(split)

re.split(pattern,string,maxsplit

分割方法以pattern作為分割串將string分段,并存入一個list,參數(shù)中的spilit表面最大分割數(shù),當(dāng)maxsplit = 0時,表示處理完整個字符串,以下是示例,其中的r2為以上生成的與‘hello’對應(yīng)的正則表達式:

r8 = re.split(r2,'IhelloLOVEhelloPYTHONhello!',0)
print(r8)#輸出['I', 'LOVE', 'PYTHON', '!']
r9 = re.split(r2,'IhelloLOVEhelloPYTHONhello!',1)
r10 = re.split(r2,'IhelloLOVEhelloPYTHONhello!',2)
print(r9)#輸出['I', 'LOVEhelloPYTHONhello!']
print(r10)#輸出'I', 'LOVE', 'PYTHONhello!']

可以看出,雖然string相同,但采用不同的maxsplit值,輸出 的結(jié)果并不相同,字符串被分成了maxsplit+1個段,存入了list列表。

3.5 找出所有匹配串

re.findall(pattern,string)

此方法是返回一個表,表中給出可以匹配pattern的所有子串,前面已經(jīng)有過關(guān)于手機號的正則示例了,這里才用r1 = re.compile('1[2-9]{2}'來演示findall方法:

r1 = re.compile('1[2-9]{2}')
r2 = re.findall(r1,'1239abc178555wer123')
print(r2)#輸出['123', '178', '123']
print(type(r2))#輸出<class 'list'>

通過示例可以看出,findall方法會直接返回匹配的子串,并且將子串存入一個列表。
而且不管子串是字符串的前綴、后綴還是包含于字符串中,findall方法都可以找到。

聯(lián)系方式

如果有任何意見或者建議,歡迎發(fā)送郵件到我的郵箱:psywency@foxmail.com

比心??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容