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

飛雪無情發表於2018-02-11

本文為原創文章,轉載註明出處,歡迎掃碼關注公眾號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/,第一時間看後續精彩文章。覺得好的話,順手分享到朋友圈吧,感謝支援。

掃碼關注

相關文章