Re模塊是python的內置模塊,提供了python中正則表達式的所有用途。默認安裝位置在python根目錄下的Lib文件夾中(例如...\Python\Python37\Lib)。主要提供了三種字符串操作方法:
字符查找/匹配
字符替換
字符分割
因為是面向字符串類型的模塊,所以不得不提字符串編碼類型。在re模塊中,模式字符串和搜索字符串既可以是Unicode字符串(常用的str類型),也可以是8位字節字符串(2位16十六進制數字,如\xe5),但必須是同壹類型。
02字符串查找/匹配
預編譯:編譯
在介紹搜索匹配功能之前,我們需要知道re的編譯功能,它可以將壹個模式字符串編譯成正則表達式類型,以便快速匹配和重用。
進口?re模式?=?重新編譯(r'[a-z]{2,5} ')類型(模式)?#回復。模式
這個示例創建壹個名為pattern的正則表達式對象(re.pattern ),用於匹配由2-5個小寫字母組成的模式字符串。以後使用其他正則表達式函數時,可以使用pattern進行方法調用。
匹配:匹配
match函數用於從文本字符串的開頭開始匹配。如果匹配成功,則返回相應的匹配對象。此時可以通過調用group()方法返回匹配結果,也可以使用span()方法返回匹配的起止下標區間。否則不返回任何內容。
進口?re模式?=?重新編譯(r'[a-z]{2,5}') text1?=?這個?是嗎?答?re?測試結果?=?pattern . match(text 1)print(RES)?#如果?res:?print(res.group())?#這個?print(res.span())?#(0,?4) text2?=?是的?這個?是嗎?答?re?測試'打印(pattern . match(text 2))#無
match函數還有壹個變形函數fullmatch,當且僅當模式字符串和文本字符串完全匹配時,它才返回壹個匹配對象,否則返回None。
搜索:搜索
Match僅提供從文本字符串的起始位置開始的匹配結果。如果想從任意位置匹配,可以調用search方法,類似於match方法。當任意位置匹配成功後,可以立即返回匹配對象,也可以調用span()方法獲取起止區間,調用group方法獲取匹配的文本字符串。
進口?re模式?=?re . compile(r ' \ s[a-z]{ 2 } ')text 1?=?這個?是嗎?答?re?測試結果?=?pattern . search(text 1)print(RES)?#如果?res:?print(res.group())?#是?print(res.span())?#(4,?7)模式2?=?重新編譯(r'\s[a-z]{5}') text2?=?是的,這個?是嗎?答?re?測試打印(模式2 .搜索(文本2))#無
匹配和搜索都用於匹配單個結果。唯壹不同的是,前者從起始位置匹配,後者從任意位置匹配。如果匹配成功,則返回壹個匹配對象。
完全搜索:findall/finditer
它幾乎是最常用的正則表達式函數,用於查找所有匹配結果。比如在爬蟲信息抽取中,抽取所有匹配的字段是非常方便的。
進口?re模式?=?re.compile(r'\s[a-z]{2,5}') text1?=?這個?是嗎?答?re?測試結果?=?pattern . find all(text 1)print(RES)?#['?是',??re ',??測試']
Findall返回壹個列表對象類型,當沒有匹配的對象時,返回壹個空列表。為了避免同時返回大量匹配結果而占用過多內存,可以調用finditer函數返回壹個叠代器類型,其中每個叠代元素都是壹個match對象,可以繼續調用group和span方法來獲得相應的結果。
進口?re模式?=?re.compile(r'\s[a-z]{2,5}') text1?=?這個?是嗎?答?re?測試結果?=?pattern . finditer(text 1)for?r?在?res:?print(r.group())" " "?是嗎?re?測試“”
當匹配的模式串比較簡單或者只需要單詞來調用時,上述所有方法也可以直接調用re類函數,無需事先編譯。此時,每個方法的第壹個參數是模式字符串。
進口?re模式?=?重新編譯(r'\d{2,5} ')文本?=?這個?是嗎?re?test' re.findall('[a-z]+',?正文)?#['這個',?是',?re ',?測試'] 03字符串替換/分段
替換:子/子網絡
當需要對文本字符串進行條件替換時,可以通過調用re.sub來實現(當然也可以在調用實例方法之前進行編譯),對應的參數分別是模式字符串、替換格式和文本字符串。您還可以通過添加默認參數來限制替換次數和匹配模式。通過對模式字符串進行分組,可以實現字符串的格式替換(類似於字符串的格式方法)來實現特定的任務。
進口?回復短信?=?今天嗎?是嗎?2020-03-05 '打印(回復('-','',?正文))?# '今天?是嗎?20200305 '打印(回復('-','',?文字,?1))?# '今天?是嗎?' print(re sub((\ d { 4 })-(\ d { 2 })-(\ d { 2 })',?r'\2/\3/\1 ',?正文))?# '今天?是嗎?03/05/2020'
re2的壹個變體方法是re2,不同之處在於它返回壹個2元素元組,其中第壹個元素是替換結果,第二個元素是替換次數。
進口?回復短信?=?今天嗎?是嗎?2020-03-05' print(re.subn('-',?'',?正文))?#(‘今天?是嗎?20200305',?2)
分割:分割
還可以調用正則表達式來實現字符串的特定分段,這相當於。split()方法實現特定模式的分割並返回壹個切割結果列表。
進口?回復短信?=?今天嗎?是嗎?答?re?測試,?什麽?做什麽?妳呢。介意嗎?打印(重新拆分(',',?正文))?#['今天?是嗎?答?re?測試',??什麽?做什麽?妳呢。介意嗎?] 04摘要
python中的Re模塊提供了正則表達式的常用方法,每個方法包括兩種形式:類方法調用(如re.match)或模式字符串實例調用(pattern。匹配)。
常用匹配函數:match/fullmatch
常用搜索功能:search/findall/finder。
常用替代函數:sub/subn
常用切割功能:分割
還有很多其他方法,但不是很常見。詳情請參考官方文件。
此外,python還有第三方正則表達式庫regex可供選擇。
這是壹篇關於理解python正則表達式的常用函數的文章。希望大家以後多多支持!