python自帶了正則表達式的模塊,使用這個模塊可以非常方便地通過正則表達式提取有規律的信息;
1.使用findall函數
findall的函數原型:
re.findall(pattern,string,flags=0)
pattern 表示正則表達式,string表示原來的字符串,flags表示一些特殊功能的標志(例如:忽略大小寫,忽略換行符)常省略
步驟:
import re content = "我的微博賬戶是: 1234567,QQ 密碼是:33445566,銀行卡密碼是:888888,Gitthub密碼是:999abc999,幫我記住他們" comp = ":(.*?)," comp_name="(我的.*?)\d" passwd_list = re.findall(comp,content) name_list = re.findall(comp_name,content) account_passwd = re.search('賬戶是:(.*?),...密碼是:(.*?),',content) # print(passwd_list) # print("我的密碼分別是{}".format(passwd_list)) print(name_list) # print(account_passwd) # print(passwd_list) # print(account_passwd.group())
2.search函數
search()的用法和findall()的用法一樣,但是search()只會返回第一個滿足要求的字符串.一旦找到符合要求的內容,它就會停止查找.
search()函數原型:
re.search(pattern,string,flags=0) 和findall()一樣
對於結果,如果匹配成功,則是一個正則表達式的對象;如果沒有匹配到的任何數據,就是None.如果需要得到匹配的結果,則需要通過.group()這個方法來獲取里面的值.
小結:
findall()和search()函數的用法基本差不多;
區別:
1.findall()會把匹配到的結果全部展示出來,而往往我們編寫程序的時候,需要對匹配的結果進行篩選,這個時候
search()搭配的group()功能就非常有用了;此時如果用的是findall()還需要另外設置程序從結果中篩選符合要求的.而用search()搭配group()就能准確地定位到目標.
2.另外用findall()和search()的匹配結果也有所不同,例如上面示例代碼:
如果把參數:
'賬戶是:(.*?),...密碼是:(.*?)傳給findall pattern 得出的結果是:
[(' 1234567', '33445566')]
而用search()同樣的參數,匹配的結果是這樣的:
<re.Match object; span=(4, 33), match='賬戶是: 1234567,QQ 密碼是:33445566,'>
調用group() print(account_passwd.group()) 則是:
"賬戶是: 1234567,QQ 密碼是:33445566,""
我們很容易發現,findall()匹配的結果中,只體現了小括號()中要提取的內容,
而用search()會加上,我們設定在小括號()外的內容,因此當我們需要加入說明文字的時候,這個時候用search就顯得非常的有優勢了;
識記要點:
findalll() 把所匹配結果展示到列表中,提取內容不包括括號指定.
search()常與group()搭配使用,提取指定內容,括號外非指定的內容可一同展示.