1. 程式人生 > 其它 >第11.3節 Python正則表示式搜尋支援函式search、match、fullmatch、findall、finditer

第11.3節 Python正則表示式搜尋支援函式search、match、fullmatch、findall、finditer

一、 概述
re模組的函式search、match、fullmatch、findall、finditer都是用於搜尋文字中是否包含指定模式的串,函式的引數都是一樣的,第一個引數是模式串、第二個是搜尋文字、第三個是搜尋標記,但在功能上有區別,下面分別介紹這幾個函式的功能。

二、 re. search函式
search掃描整個 搜尋文字 找到模式串對應匹配樣式的第一個位置,如果找到則返回一個相應的 匹配物件,否則返回None。關於匹配物件請參考《》;
案例:

print("發現了匹配字串") if re.search("第[一-十][章回]",'第二回 悟徹菩提真妙理 斷魔歸本合元神 ') else print("未發現匹配字串")
發現了匹配字串
>>>

三、 re. match函式
re.match從搜尋文字的開始位置查詢模式串對應匹配樣式,注意是必須是開始位置就能匹配。如果匹配到了正則表示式樣式,就返回一個相應的 匹配物件,否則返回None。。
案例:

>>> print("發現了匹配字串") if re.match("第[一-十][章回]",'第二回 悟徹菩提真妙理 斷魔歸本合元神 ') else print("未發現匹配字串")
發現了匹配字串
>>> print("發現了匹配字串")if re.match("第[一-十][章回]",'西遊記第二回 悟徹菩提真妙理 斷魔歸本合元神 ') else print("未發現匹配字串")
未發現匹配字串 

四、 re. fullmatch函式
fullmatch要求的是整個搜尋文字與模式串全完全匹配,如果完整匹配到了正則表示式樣式,就返回一個相應的 匹配物件,否則返回None。
注意:如果搜尋文字能找到匹配串但比匹配模式多出更多的內容也返回None。
案例:

>>> print("發現了匹配字串") if re.fullmatch("第[一-十][章回]",'第二回 悟徹菩提真妙理 斷魔歸本合元神 ') else print("未發現匹配字串")
未發現匹配字串
>>> print("發現了匹配字串") if re.fullmatch("第[一-十][章回](.)*",'第二回 悟徹菩提真妙理 斷魔歸本合元神 ') else print("未發現匹配字串")
發現了匹配字串
>>>

五、 re. findall函式
findall返回所有匹配的指定模式的文字子串到列表中,一個元素一個匹配串。
案例:

>>> re.findall("第[一-百][章回]",'第一回 悟徹菩提真妙理 斷魔歸本合元神 第二回 悟徹菩提真妙理 斷魔歸本合元神')
['第一回', '第二回']

六、 re. finditer函式
finditer從搜尋文字的開始位置查詢模式串對應匹配樣式, 從左到右進行掃描,匹配按找到的順序將匹配物件儲存到迭代物件的當前對應元素中。
案例:

>>> l = re.finditer("第[一-十][章回]","第一回靈根育孕源流出 心性修持大道生 第二回 悟徹菩提真妙理 斷魔歸本合元神 第三回 四海千山皆拱伏 九幽十類盡除名")
>>> for i in l:print(i)
<re.Match object; span=(0, 3), match='第一回'>
<re.Match object; span=(19, 22), match='第二回'>
<re.Match object; span=(39, 42), match='第三回'>
>>>