我正在解析網(wǎng)頁以獲取標(biāo)簽內(nèi)的一些值,但我對標(biāo)簽不感興趣,只對內(nèi)容感興趣。我正在使用 regexp.FindAll 來獲取所有匹配的表達(dá)式(包括標(biāo)簽),然后使用 ReplaceAll 來替換每個(gè)子表達(dá)式,刪除標(biāo)簽。當(dāng)然,兩次運(yùn)行正則表達(dá)式需要兩倍的時(shí)間,我想避免它。有沒有辦法同時(shí)應(yīng)用這兩個(gè)函數(shù),或者等效的正則表達(dá)式?當(dāng)然,我可以制作一個(gè)刪除標(biāo)簽的函數(shù),但在某些情況下可能會更復(fù)雜,因?yàn)榭勺冮L度的標(biāo)簽(如 )和正則表達(dá)式可以解決這個(gè)問題。我的代碼的一個(gè)簡單示例在這里(它不會在操場上運(yùn)行):http : //play.golang.org/p/uGKjzmylSYfunc main() { res, err := http.Get("http://www.elpais.es") if err != nil { panic(err) } body, err := ioutil.ReadAll(res.Body) fmt.Println("body: ", len(body), cap(body)) res.Body.Close() if err != nil { panic(err) } r := regexp.MustCompile("<li>(.+)</li>") // Find all subexpressions, containing the label <li> out := r.FindAll(body, -1) for i, v := range out[:10] { fmt.Printf("%d: %s\n", i, v) } //Replace to remove the label. out2 := make([][]byte, len(out)) for i, v := range out { out2[i] = r.ReplaceAll(v, []byte("$1")) } for i, v := range out2[:10] { fmt.Printf("%d: %s\n", i, v) }}順便說一下,我知道正則表達(dá)式不能用于解析 HTML。我只對一些最里面的標(biāo)簽感興趣,對結(jié)構(gòu)或嵌套不感興趣,所以我想這沒問題:)
- 1 回答
- 0 關(guān)注
- 304 瀏覽
添加回答
舉報(bào)
0/150
提交
取消