python 正則表達式findall和search用法


  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()搭配使用,提取指定內容,括號外非指定的內容可一同展示.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM