Go語言中使用正則提取匹配的字元串

本文為原創文章,轉載註明出處,歡迎掃碼關注公眾號flysnow_org或者網站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.html20180120golang-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/w

本文為原創文章,轉載註明出處,歡迎掃碼關注公眾號flysnow_org或者網站flysnow.org/,第一時間看後續精彩文章。覺得好的話,順手分享到朋友圈吧,感謝支持。

weixin.qq.com/r/NjhqctX (二維碼自動識別)

推薦閱讀:

TAG:Go語言 | 網頁爬蟲 | 正則表達式 |