一丙猬、匹配對(duì)象以及group()和groups()方法:
當(dāng)處理正則表達(dá)式時(shí)腐碱,除了正則表達(dá)式對(duì)象之外年缎,還有另一個(gè)對(duì)象類(lèi)型:匹配對(duì)象忍弛。這些是成功調(diào)用match()或者search()返回的對(duì)象。匹配對(duì)象有兩個(gè)主要的方法:group()和groups()拜马。
1. group()要么返回整個(gè)匹配對(duì)象渗勘,要么根據(jù)要求返回特定子組。
>>> a = re.search(r"(\w)(.\d)","as.21")
>>> a<_sre.SRE_Match object; span=(1, 4), match='s.2'>
>>> a.group() #返回整個(gè)匹配對(duì)象's.2'
>>> a.group(0)
's.2'
>>> a.group(1) #根據(jù)要求返回特定子組
's'
>>> a.group(2)
'.2'
2. groups()僅返回一個(gè)包含唯一或者全部子組的元組俩莽。
>>> a.groups()
('s', '.2') #返回全部子組旺坠,是包含在一個(gè)元組中的
3. 如果沒(méi)有子組的要求,那么當(dāng)group()仍然返回整個(gè)匹配時(shí)豹绪,groups()返回一個(gè)空元組价淌。
>>> a = re.search(r"\d+","334354") #沒(méi)有子組匹配
>>> a.group() #返回整個(gè)匹配
'334354'
>>> a.groups() #返回空元組
()
好了,復(fù)習(xí)完上面這些概念瞒津,我們就重點(diǎn)來(lái)看下re模塊中最常用的re.search()和re.findall()的區(qū)別蝉衣。
對(duì)比完區(qū)別之后,我們下面來(lái)通過(guò)一些示例來(lái)理解re.search()和re.findall()在用法上的異同巷蚪,以及更多擴(kuò)展re.match病毡、re.fullmatch 、re.finditer屁柏、re.sub和re.subn的用法示意啦膜。
二、re.search(pattern, string, flags=0)
搜索整個(gè)字符串并返回第一個(gè)成功的匹配淌喻,成功則返回一個(gè)匹配對(duì)象僧家,失敗則返回None.
>>> re.search("com","www.baidu.com")
<_sre.SRE_Match object; span=(10, 13), match='com'>
>>> re.search("com","www.baidu.com.com.com")
<_sre.SRE_Match object; span=(10, 13), match='com'> # 只返回第一個(gè)匹配的位置
三、re.findall(pattern, string, flags=0)
在字符串中找到正則表達(dá)式所匹配的所有子串裸删,并返回一個(gè)列表八拱。如果沒(méi)有找到匹配,則返回空列表涯塔。
>>> re.findall("com","www.baidu.com.com.com")
['com', 'com', 'com']
>>> re.findall("aa","www.baidu.com.com.com")
[]
四肌稻、re.match(pattern,string,flags=0)
- match()試圖從字符串的起始部分對(duì)模式進(jìn)行匹配,如果成功則返回一個(gè)匹配對(duì)象匕荸,失敗則返回None.
>>> import re
>>> re.match(r"www","www.baidu.com")
<_sre.SRE_Match object; span=(0, 3), match='www'> # 返回的是匹配對(duì)象
>>> type(re.match("www","www.baidu.com")) # 查看返回類(lèi)型
<class '_sre.SRE_Match'>
>>> print(re.match("com","www.baidu.com"))
None
五爹谭、 re.fullmatch(pattern, string, flags=0)
完全匹配string
>>> print(re.fullmatch("com","com"))
<_sre.SRE_Match object; span=(0, 3), match='com'>
>>> print(re.fullmatch("com","comssa")) #必須要完全匹配
None
六、 re.finditer(pattern,string,flags=0)
查找所有匹配成功的字符串榛搔,并返回iteror
>>> re.finditer("com","www.baidu.com.com.com") #返回迭代器對(duì)象
<callable_iterator object at 0x00000247617F06D8>
>>> list(re.finditer("com","www.baidu.com.com.com"))
[<_sre.SRE_Match object; span=(10, 13), match='com'>, <_sre.SRE_Match object; span=(14, 17), match='com'>, <_sre.SRE_Match object; span=(18, 21), match='com'>]
七诺凡、re.sub()和re.subn()
- re.sub用于替換字符串中的匹配項(xiàng),
- pattern : 正則中的模式字符串践惑。
- repl : 替換的字符串绑洛,也可為一個(gè)函數(shù)。
- string : 要被查找替換的原始字符串童本。
- count : 模式匹配后替換的最大次數(shù)真屯,默認(rèn) 0 表示替換所有的匹配。
>>> re.sub(r"[ae]","?","adsdeef")
'?dsd??f'
>>> re.subn(r"[ae]","?","adsdeef") # subn()比sub()多返回了一個(gè)替換的總數(shù)
('?dsd??f', 3)