共计 2663 个字符,预计需要花费 7 分钟才能阅读完成。
简介
有时,咱们会遇到一些须要应用字符串的匹配和查找的工作。并且咱们晓得这种状况下,应用正则表达式是最简洁和优雅的。为了实现某个工作特地去系统地学习正则表达式费时费力,而且一段时间不必又很容易忘记。下次遇到问题还要再反复这个过程。commonregex
库来了,它内置很多罕用的正则表达式,开箱即用。当然,我并不是说没必要去学习正则表达式,熟练掌握正则表达式须要工夫和练习,对于时长和文本处理打交道的开发人员,正则表达式决定是晋升工作效率的一把利器。
疾速应用
本文代码应用 Go Modules。
创立目录并初始化:
$ mkdir commonregex && cd commonregex | |
$ go mod init github.com/darjun/go-daily-lib/commonregex |
装置 commonregex
库:
$ go get -u github.com/mingrammer/commonregex
简略应用:
package main | |
import ( | |
"fmt" | |
cregex "github.com/mingrammer/commonregex" | |
) | |
func main() {text := `John, please get that article on www.linkedin.com to me by 5:00PM on Jan 9th 2012. 4:00 would be ideal, actually. If you have any questions, You can reach me at (519)-236-2723x341 or get in touch with my associate at harold.smith@gmail.com` | |
dateList := cregex.Date(text) | |
timeList := cregex.Time(text) | |
linkList := cregex.Links(text) | |
phoneList := cregex.PhonesWithExts(text) | |
emailList := cregex.Emails(text) | |
fmt.Println("date list:", dateList) | |
fmt.Println("time list:", timeList) | |
fmt.Println("link list:", linkList) | |
fmt.Println("phone list:", phoneList) | |
fmt.Println("email list:", emailList) | |
} |
运行后果:
$ go run main.go | |
date list: [Jan 9th 2012] | |
time list: [5:00PM 4:00] | |
link list: [www.linkedin.com harold.smith@gmail.com] | |
phone list: [(519)-236-2723x341] | |
email list: [harold.smith@gmail.com] |
commonregex
提供的 API 十分易于应用,调用相应的类别办法返回一段文本中合乎这些格局的字符串列表。下面顺次从 text
获取 日期列表 , 工夫列表 , 超链接列表 , 电话号码列表 和电子邮件列表。
内置的正则
commonregex
反对很多罕用的正则表达式:
- 日期;
- 工夫;
- 电话号码;
- 超链接;
- 邮件地址;
- IPv4/IPv6/IP 地址;
- 价格;
- 十六进制色彩值;
- 信用卡卡号;
- 10/13 位 ISBN;
- 邮政编码;
- MD5;
- SHA1;
- SHA256;
- GUID,全局惟一标识;
- Git 仓库地址。
每种类型又反对多种格局,例如日期反对09.11.2020
/Sep 11th 2020
。
上面筛选几种类型来介绍。
日期
func main() { | |
text := `commonregex support many date formats, like 09.11.2020, Sep 11th 2020 and so on.` | |
dateList := commonregex.Date(text) | |
fmt.Println(dateList) | |
} |
匹配进去的日期(留神 Go 中 slice 的输入):
[09.11.2020 Sep 11th 2020]
工夫
工夫相对来说格局繁多一些,有 24 小时制的工夫如:08:30
/14:35
,有 12 小时制的工夫:08:30am
/02:35pm
。
看示例:
func main() {text := `I wake up at 08:30 (aka 08:30am) in the morning, take a snap at 13:00(aka 01:00pm).` | |
timeList := commonregex.Time(text) | |
fmt.Println(timeList) | |
} |
匹配进去的工夫列表:
[08:30 08:30am 13:00 01:00pm]
IP/MAC/MD5
应用办法都是相似的,这几个放在一起举例。
IPv4 地址是 4 个以 .
分隔的数字,每个数字都在 [0-255] 范畴内。
MAC 是计算机的物理地址(又叫以太网地址,局域网地址等),是 6 组以 :
分隔的十六进制数字,每组两个。
MD5 是一种哈希算法,将一段数据转为长度为 32 的字符串。
func main() { | |
text := `mac address: ac:de:48:00:11:22, ip: 192.168.3.20, md5: fdbf72fdabb67ea6ef7ff5155a44def4` | |
macList := commonregex.MACAddresses(text) | |
ipList := commonregex.IPs(text) | |
md5List := commonregex.MD5Hexes(text) | |
fmt.Println("mac list:", macList) | |
fmt.Println("ip list:", ipList) | |
fmt.Println("md5 list:", md5List) | |
} |
输入:
mac list: [ac:de:48:00:11:22] | |
ip list: [192.168.3.20] | |
md5 list: [fdbf72fdabb67ea6ef7ff5155a44def4] |
总结
commonregex
足够咱们去应酬个别的应用场景了。
大家如果发现好玩、好用的 Go 语言库,欢送到 Go 每日一库 GitHub 上提交 issue????
参考
- commonregex GitHub:https://github.com/mingrammer/commonregex
- Go 每日一库 GitHub:https://github.com/darjun/go-daily-lib
我
我的博客:https://darjun.github.io
欢送关注我的微信公众号【GoUpUp】,独特学习,一起提高~