python 正規表達式
持更中!!!
簡介
正規表達式代表一種有規律、規則的表達方式。
「Python正規表示式」可以做什麼?
就本質上而言,編寫程式語言的目的,是要利用程式幫助我們處理事情,將繁瑣複雜的事簡單化,讓規律的事情自動化。
舉個例子來說,當我們要在一堆資料裡判斷某一串字符是否為電話號碼(0988-888-888)時我們可能首先會比對那一串字符是不是12個字符(10個數字加上兩個-),接者再判斷該字符串中的每一個字符(除了第五個和第九個是-)是不是數字,然而這樣就會大量的使用到for, if 等,若是我們使用正規表達式,我們可以這樣判斷:
1 | import re |
「正規表示式」有強大的比對功能,為多種字元條件設定了特定的符號,例如要找數字,以 \d 表示,就會讓 Python 去判別字元是不是數字。
這樣我們就可以快速在一堆字蝠中找出我們要的資料啦~
建立Regex物件
首先,最重要的第一個步驟,那當然就是import re啦!(re就是regular expression模組的名稱)
要建立Regex物件,要使用re模組中的compile()函式,以re.compile()來表示,在compile()函式的括號中填入你需要的規則,也就是編譯一個規則,放到括號中。
以找電話號碼為例,我們設定要找的號碼格式是:0988-888-888,四碼數字-三碼數字–三碼數字。
在正規表示式中,\d 代表一個只能是數字的字元,我們就用 \d 來建立電話號碼格式。
1 | phoneNumRegex = re.compile(r'\d\d\d\d-\d\d\d-\d\d\d') |
建立的好的Regex物件,我們把它指派給一個好懂得變數,方便之後使用,才不用一直打,只要打出 phoneNumRegex,就代表你所設定的規則。
比對Regex
接著就要來講一些入門用法啦!先學幾個基本的用法就好,等到對正規表示式的觀念建立了,再去拓展、延伸~
比對資料可以使用 search() 或 findall() 方法,search()只會找出符合規則的一筆資料,findall()則是會把所有符合的資料都找出來給你,所以才叫 find all。
search()
search()方法可以幫助我們找對比對成功的第一筆電話
如果有找到符合規則的,便會得到一個 Match 物件;如果沒有找到,則會得到 None。
1 | phoneNumRegex = re.compile(r'\d\d-\d\d\d\d-\d\d\d\d') |
而呼叫 Match 物件需要使用 group()方法,才可以把找到的東西呈現出來,也就是程式才會顯示出比對正確的字串。
執行過就會得到這樣的輸出啦!
0988-888-888
findall()
findall()方法一看就是會幫你把所有符合規則的資料找齊
1 | phoneNumRegex = re.compile(r'\d\d\d\d-\d\d\d-\d\d\d') |
執行過就會得到這樣的輸出啦!
['0988-888-888', '0988-888-888']
想看更多findall()在爬蟲中實例可以前往這呦!👉瞭解更多
search() findall() 差異
- 你不需要使用 group() 就可以呈現出比對成功的結果。
- findall()方法返回串列(list),串列內的項目是字串(string);然而 search() 方法擇返回字串(string)。
更多用法
其實正規表達式還有很多很多用法,但因為實在太懶了哈哈所以就簡單介紹一下啦~
等到我真的運用自如的時候再來做詳細介紹嗚嗚嗚 希望有那一天的到來嘿嘿!