Go語言中使用正則提取匹配的字元串
本文為原創文章,轉載註明出處,歡迎掃碼關注公眾號
flysnow_org
或者網站http://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.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正則的使用,可以參考官方的這篇正則表達式的介紹。https://github.com/google/re2/wiki/Syntax
本文為原創文章,轉載註明出處,歡迎掃碼關注公眾號
flysnow_org
或者網站http://www.flysnow.org/,第一時間看後續精彩文章。覺得好的話,順手分享到朋友圈吧,感謝支持。
http://weixin.qq.com/r/NjhqctXEt4jIrZER920k (二維碼自動識別)
推薦閱讀: