Python中的正則表達式

回顧

在Python進階記錄之基礎篇(二十四)中,我們介紹了Python中線程與多線程的概念和基本用法,需要重點掌握多線程的創建和使用、理解線程鎖的意義並能正確使用它。今天我們講一下Python中的正則表達式。

正則表達式的概念和意義

字符串是我們編程時涉及到的最多的一種數據結構,對字符串進行操作的需求幾乎無處不在,而正則表達式就是處理字符串的常見方法。

正則表達式是一個特殊的字符序列,它能幫助你方便的檢查一個字符串是否與某種模式匹配。它的設計思想是用一種描述性的語言來給字符串定義一個規則,凡是符合規則的字符串,我們就認為它“匹配”,是合法的,否則,該字符串就是不合法的。

正則表達式的存在具有很大的意義,它在我們的開發中發揮著巨大的作用。例如檢查某個字符串是否是合法的身份證號,是否是合法的郵箱地址等。此外,正則表達式在自然語言處理、網絡爬蟲、數據處理等領域中也是相當重要的。

Python中的正則表達式

正則表達式模式語法

上圖中展示的是正則表達式模式語法中的特殊元素,正則表達式一般而言是不受語言影響的。即不論是Java或者Python,對於模式語法的使用都是一致的,不同的只是調用函數。

在Python中使用正則表達式

Python通過re模塊來使用正則表達式,re模塊的功能非常豐富,它使Python具有全部的正則表達式功能。

  • re.match( )方法

match( )方法從字符串的起始位置匹配一個模式,如果匹配成功,返回一個Match對象,否則返回None。match( )方法擁有三個參數,pattern表示匹配模式,string表示要匹配的字符串,flags用於控制正則表達式的匹配方式,例如是否區分大小寫等,默認為0不區分。以下為match( )方法的基本使用結構。

re.match(r'匹配模式', '待匹配字符串')

匹配模式前使用“r”可以忽略轉義問題。

Python中的正則表達式

match()方法匹配

match( )方法匹配的是起始位置,雖然s中包含com,但因為不在開頭,所以匹配失敗。如果要掃描整個字符串進行匹配,就需要用到search( )方法。

  • re.search( )方法

re.search( )方法會掃描整個字符串並返回第一個成功的匹配。search( )同樣擁有pattern、string和flags三個參數,用法和意義與match( )方法中的參數一致。我們將上述代碼中的match( )方法換成search( )方法,http和com就都能順利匹配成功了。

Python中的正則表達式

search( )方法匹配

match( )方法從字符串的開始匹配,如果字符串開始不符合正則表達式,則匹配失敗,函數返回None;而search( )方法會匹配整個字符串,只要找到一個匹配即匹配成功。

  • groups( )方法和group(num)方法

除了簡單地判斷是否匹配之外,正則表達式還提供了獲取子串的強大功能。用()表示的就是要提取的分組。使用groups( )方法或group(num)方法即可獲取分組信息。

Python中的正則表達式

分組

上述代碼中,我們在匹配模式中定義了兩個組,分別表示3位區號和3~8位本地號。groups( )方法返回結果為一個包含分組信息的元組,通過取元組信息可以獲取子串。group(num)方法返回的是字符串,其中group(0)永遠是原始字符串,子串從group(1)開始取。

  • re.compile( )方法

當我們在Python中使用正則表達式時,re模塊內部實際上做了兩件事情:編譯正則表達式,用編譯後的正則表達式匹配字符串。因此,之前我們無論使用match( )方法還是search( )方法,每調用一次,都會重新編譯一遍正則表達式。這樣,當一個正則表達式重複多次使用時效率就會降低。

那麼,我們可不可以預編譯需要重複多次使用的正則表達式呢?答案當然是肯定的,re模塊提供了compile( )方法用於編譯正則表達式,該方法會生成一個正則表達式對象,供match( )和 search( )這兩個函數使用,等下一次要重複使用這個正則表達式時就不需要編譯這個步驟了,直接進行匹配。

Python中的正則表達式

compile( )方法

使用compile( )生成正則表達式對象,由於該對象自己包含了正則表達式,所以調用對應的方法時就不用給出正則字符串了。

總結

以上內容介紹了Python中正則表達式的簡單用法,需要重點掌握re模塊的幾個常用函數,並瞭解正則表達式模式語法。正則表達式涉及的內容非常豐富,需要我們在開發過程中不斷熟練學習掌握,最重要的就是我們列出的正則表達式模式語法表,你不一定要記住它,但你必須知道它的存在並能利用它編寫各種複雜的匹配模式。感謝大家的支持與關注,歡迎一起學習交流~

相關推薦

推薦中...