正規表示式
首先要匯入re庫
其中常用的函式:compile函式
格式為re.complie(pattern[, flags])
pattern : 乙個字串形式的正規表示式
flags 可選,表示匹配模式,比如忽略大小寫,多行模式等,具體引數為:
re.i 忽略大小寫
re.l 表示特殊字符集 \w, \w, \b, \b, \s, \s 依賴於當前環境
re.m 多行模式
re.s 即為』 . 『並且包括換行符在內的任意字元(』 . 『不包括換行符)
re.u 表示特殊字符集 \w, \w, \b, \b, \d, \d, \s, \s 依賴於 unicode 字元屬性資料庫
re.x 為了增加可讀性,忽略空格和』 # '後面的注釋
常用的.表示匹配任意字元,*?表示任意內容
re裡match,search,findall的區別?
import re
a = 『abc1d2ef3y』
b = 『3721a3690』
resulta = re.match(』[0-9]』, a)
print(resulta)
#列印結果是none,就是沒有匹配到,為什麼沒有匹配到呢,a中明明包含的有數字啊,因為match是從字串的第乙個字元開始匹配
#而a這第乙個字元是a,是個字母,不是0到9的任意乙個數值,所以沒有匹配到,返回結果是none
resultb = re.match(』[0-9]』, b)
print(resultb)
#列印結果是,匹配結果是3,位置是從0開始到第1個分片擷取的數值就是3。
『』』如何拿到match匹配到的結果?
『』』if resultb:
print(「正則表達是match匹配到的結果是:」, resultb.group())
##輸出結果是3。 為什麼要判斷一下,因為如果match不到值,同時用group方法的話就會導致程式報錯,所以要先判斷下是否有值
resultc = re.search(』[0-9]』, a)
print(resultc)
##列印結果是,這個和用match有明顯的區別,索引位置是3-4
#這是從第乙個開始,沒有規定說第乙個必須是規則中寫的0-9的任意數字,即全域性匹配
resultd = re.findall(』[0-9]』, a)
print(resultd)
##列印結果是[『1』, 『2』, 『3』],找所有能匹配到的東西,統統拿出來,結果是個列表
可以發現比較明顯的區別是如果match和search都是遇到第乙個即返回,match只匹配開頭,search是發現符合的就返回,還是findall比較符合實際需求
findall實戰
import re
pattern = re.compile(』.?this_is_a_test.?>(.?).?data2:(.?)』,re.s)
html=』.hello,this_is_a_test,end>here is the data data2:this is data2』
items = re.findall(pattern, html)
print(items)
輸出:通過(.?)和前後文來構造想要資料正規表示式
爬蟲實戰
def main():
url = 『
html = get_one_page(url)
print(html)
main()
發現爬取後又有亂碼的情況存在,初步猜測是中文解碼失敗
搜尋後發現原因:《http權威指南》裡第16章國際化裡提到,如果http響應中content-type欄位沒有指定charset,則預設頁面是』iso-8859-1』編碼。這處理英文頁面當然沒有問題,但是中文頁面,就會有亂碼了,將編碼方式改為utf-8即可
在其中按下ctrl+f搜尋今天,明天,檢視對應標籤
再看下明天
輸出:
python3 爬蟲 正規表示式學習
常用匹配規則 re.match方法 從字串開頭開始匹配,一旦開頭不匹配,就會匹配失敗 import re content hello 1234567 world this is a regex demo print len content result re.match hello s d swor...
python3正規表示式
正規表示式,又稱規則表示式。英語 regular expression,在 中常簡寫為regex regexp或re 電腦科學的乙個概念。正規表示式通常被用來檢索 替換那些符合某個模式 規則 的文字。正規表示式是對字串操作的一種邏輯公式,就是用事先定義好的一些特定字元 及這些特定字元的組合,組成乙個...
Python3 正規表示式
常用的匹配模式 正規表示式是乙個特殊的字串行,它能幫助你方便的檢查乙個字串是否與某種模式匹配。re 模組使 python 語言擁有全部的正規表示式功能。re.match函式 re.match 嘗試從字串的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,match 就返回none。re.match...