为了账号安全,请及时绑定邮箱和手机立即绑定

Go:一次通过正则表达式 FindAll 和 ReplaceAll

Go:一次通过正则表达式 FindAll 和 ReplaceAll

Go
BIG阳 2021-07-08 14:00:06
我正在解析网页以获取标签内的一些值,但我对标签不感兴趣,只对内容感兴趣。我正在使用 regexp.FindAll 来获取所有匹配的表达式(包括标签),然后使用 ReplaceAll 来替换每个子表达式,删除标签。当然,两次运行正则表达式需要两倍的时间,我想避免它。有没有办法同时应用这两个函数,或者等效的正则表达式?当然,我可以制作一个删除标签的函数,但在某些情况下可能会更复杂,因为可变长度的标签(如 )和正则表达式可以解决这个问题。我的代码的一个简单示例在这里(它不会在操场上运行):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)    }}顺便说一下,我知道正则表达式不能用于解析 HTML。我只对一些最里面的标签感兴趣,对结构或嵌套不感兴趣,所以我想这没问题:)
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 286 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信