在Go中使用正则表达式

简介: 在Go中使用正则表达式

一、演示案例

在这个案例中声明了常量text


然后使用了regexp这个包的regexp.Compile这个方法。


这种方式是不确定用户输入的值是否符合匹配规则。


当然也可以看到结果是返回了我们需要的数据。


image.png


但是在一般情况下,如果确定了用户输入的内容是正确的是完全符合的就可以使用下方案例。


在这个案例中可以看到regexp.MustCompile使用了这个方法,并且返回的值也是一样的。


image.png


这个方法没有返回错误,但是在自己的内部方法进行了异常处理。


根据注释可以得知使用这个方法给的参数表达式是不必须可以解析的,如果不能解析则就会抛出异常。


image.png


二、正则匹配

接下来我们使用正则进行匹配, 也就是在上图方法中进行正则表达式的匹配。


案例跟上图使用的一致都是用来匹配邮箱。


那么接下来先写第一版本。


可以看到返回结果就是我们想要的。


关于正则表达式的写法这部分内容在这里就说明了, 本文主要是针对go如何使用正则表达式。


image.png


此时就会反映出第一个问题,那就是FindString这个方法只能匹配一个值。


image.png


那如何匹配多个值呢!请看下方案例


三、匹配多个值

可以看到返回结果是将所有可以匹配的邮箱都给匹配了出来。


匹配多个值需要使用FindAllString这个方法。


第一个参数为匹配的字符,第二个参数是寻找多少个,-1是全找


image.png


在go中给提供了一种非常好的方式可以直接将邮箱名、邮箱域名、和邮箱后缀给提取出来,那么应该怎么做呢!


四、正则表达式提取内容

在这里就不能继续使用上述案例的方法了,需要使用FindAllStringSubmatch这个方法


image.png


在这个方法中可以得知返回的是一个二维的字符串,从上图的返回结果也可以得知返回的就是一个二维的字符串。


image.png


既然返回的是二维的字符串切片,那么我们就可以进行循环来获取每一个提取出来的内容。


可以看到返回了四个匹配,第一个就是完整的,后边的三个都是我们获取出来的内容。


image.png


五、总结

通过以上四个案例简单的了解一下在Go中如何使用正则表达式,进行了模拟了几个场景,和go中的正则表达式包的使用。


这个案例也算是对go的一个练习,没有多深的内容,主要就是关于正则包的使用,最重要的就是最后一个案例,这种正则表达式提取内容在爬虫的项目中是非常常见的。


相关文章
|
8月前
|
存储 Go 索引
Go 正则表达式
Go 正则表达式
78 0
|
存储 Go 索引
Go 正则表达式
Go 正则表达式
80 0
|
Java 编译器 Go
Go 语言入门很简单:正则表达式(上)
在计算中,我们经常需要将特定模式的字符或字符子集匹配为另一个字符串中的字符串。此技术用于使用特别的语法来搜索给定字符串中的特定字符集。比如邮件、手机号、身份证号等等。 如果搜索到的模式匹配,或者在目标字符串中找到给定的子集,则搜索被称为成功;否则被认为是不成功的。 那么此时该用到正则表达式了。
|
Go 数据安全/隐私保护 Python
Go 编程 | 连载 27 - 正则表达式
Go 编程 | 连载 27 - 正则表达式
|
程序员 Go
Go 语言入门很简单:正则表达式(下)
在计算中,我们经常需要将特定模式的字符或字符子集匹配为另一个字符串中的字符串。此技术用于使用特别的语法来搜索给定字符串中的特定字符集。比如邮件、手机号、身份证号等等。 如果搜索到的模式匹配,或者在目标字符串中找到给定的子集,则搜索被称为成功;否则被认为是不成功的。 那么此时该用到正则表达式了。
|
11天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
52 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
1月前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
41 7
|
1月前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
1月前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
102 71
|
30天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
106 67