Golang学习笔记18:Go语言之正则表达式
Go语言之正则表达式
正则表达式:Go语言标准库内建提供了regexp包
一、基本介绍
基本符号:
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
数量上的约定
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次到更多次
{n,m} 重复n到m次
更为常用的
捕获(exp) 匹配exp,并捕获文本到自动命名的组里
(?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成
(?'name'exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
二、基本用法
func Match(pattern string , b []byte) (matched bool , err error)
func MatchString(pattern string , s string) (matched bool , err error)
func MustCompile(str string) *Regexp
func (re *Regexp) FundAllString(s string , n int) []string
例如:
package main
import (
"fmt"
"regexp"
)
func main() {
isok , _ := regexp.MatchString ("[a-zA-Z]{3}" , "zhi")
fmt.Printf("%v" , isok)
}
返回为true。zhi是在a-zA-Z的3个字符。
// regexp
package main
import (
"fmt"
"regexp"
)
func main() {
//reg := regexp.MustCompile("\\w+") 正则表达式中的\需要转义
reg := regexp.MustCompile(`^z.*l$`) //用``包含的字符会全部返回
//开头是z , 结尾是l ,中间用`.*`表示中间的
result := reg.FindAllString("zhangsanl", -1)
fmt.Printf("%v\n", result)
reg1 := regexp.MustCompile(`^z(.*)l$`)
result1 := reg1.FindAllString("zhangsand", -1)
fmt.Printf("%v\n", result1)
reg2 := regexp.MustCompile(`^z(.{1})(.{1})(.*)l$`) //捕获一次,捕获一次,捕获多次
result2 := reg2.FindAllStringSubmatch("zhangsanl", -1)
fmt.Printf("%v\n", result2)
}
输出结果:
[zhangsanl]
[]
[[zhangsanl h a ngsan]]
进程 已完成,退出代码为 0
https://my.oschina.net/kuerant/blog/199146正则基本介绍。
三、一个简单爬虫
以名字和评分为例
// simple_crawler
package main
import (
"fmt"
"io/ioutil"
"net/http"
"regexp"
)
func main() {
url := "https://movie.douban.com/subject/24751763/"
resp, err := http.Get(url)
if err != nil {
panic(err)
}
defer resp.Body.Close()
sHtml, _ := ioutil.ReadAll(resp.Body)
reg := regexp.MustCompile(`<span\s*property="v:itemreviewed">(.*)</span>`)
result := reg.FindAllStringSubmatch(string(sHtml), -1)
fmt.Println(result[0][1])
reg1 := regexp.MustCompile(`<strong\s*class="ll\s*rating_num"\s*property="v:average">(.*)</strong>`)
result1 := reg1.FindAllStringSubmatch(string(sHtml), -1)
fmt.Println(result1[0][1])
}
2021/10/10 用Goland已经爬不动豆瓣了,相同代码百度可以爬到但是豆瓣爬不到。。。
不对,经过测试感觉应该是正则表达式的问题,难道还是因为更新了以前的正则表达式不适用了?
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 赛 の 任意门!
评论
ValineGitalk



