本文為原創文章,轉載註明出處,歡迎掃碼關注公眾號
flysnow_org
或者網站www.flysnow.org/,第一時間看後續精彩文章。覺得好的話,順手分享到朋友圈吧,感謝支援。
我們在做爬蟲的過程中,需要對爬取到的內容處理,比如說提取出我們需要的內容和文字,比如城市資訊、人員資訊等等,除了字串查詢外,使用正則匹配是比較優雅和方便的方案。
這篇文章,主要以提取URL中的日期和文章名為例,來舉例說明如何使用正則提取字串。
比如這個URL http://www.flysnow.org/2018/01/20/golang-goquery-examples-selector.html
,這是前段時間寫的一篇關於goquery的使用教程。從這個URL我們可以看到有年月日的日期資訊,還有最後面的文章的名稱資訊,這樣一個URL,我們如何從中得到這些資訊呢?這就要用到正規表示式的分組了。
正規表示式的分組,以括號()
表示,每一對括號就是我們匹配到的一個文字,可以把他們提取出來。
通過上面URl的分析,我們定義正規表示式如下:
^http://www.flysnow.org/([\d]{4})/([\d]{2})/([\d]{2})/([\w-]+).html$
複製程式碼
^$
分別表示匹配的開始和結束,界定我們正規表示式的範圍。
[\d]{4}
表示我們要正好匹配4位數字,因為年份是4位,所以我們定義為匹配4位。後面的月份和天是2位,所以定義為2位。
[\w-]
匹配字串和中槓,加號(+)表示匹配1個或者多個。
然後他們都加了括號()
,意味著我們要提取這些字串。
下面看下完整的原始碼。
flysnowRegexp := regexp.MustCompile(`^http://www.flysnow.org/([\d]{4})/([\d]{2})/([\d]{2})/([\w-]+).html$`)
params := flysnowRegexp.FindStringSubmatch("http://www.flysnow.org/2018/01/20/golang-goquery-examples-selector.html")
for _,param :=range params {
fmt.Println(param)
}
複製程式碼
執行列印輸出:
http://www.flysnow.org/2018/01/20/golang-goquery-examples-selector.html
2018
01
20
golang-goquery-examples-selector
複製程式碼
FindStringSubmatch
方法是提取出匹配的字串,然後通過[]string
返回。我們可以看到,第1個匹配到的是這個字串本身,從第2個開始,才是我們想要的字串。
fmt.Println("年份為:"+params[1])
fmt.Println("月份為:"+params[2])
fmt.Println("天數為:"+params[3])
fmt.Println("文章名為:"+params[4])
複製程式碼
這樣我們需要的這篇文章的資訊就被提取出來了。
正則對於處理文章很好用,關於更多Golang正則的使用,可以參考官方的這篇正規表示式的介紹。github.com/google/re2/…
本文為原創文章,轉載註明出處,歡迎掃碼關注公眾號
flysnow_org
或者網站www.flysnow.org/,第一時間看後續精彩文章。覺得好的話,順手分享到朋友圈吧,感謝支援。