Go 每日一库之 commonregex

Go语言精选

共 3097字,需浏览 7分钟

 ·

2020-09-17 02:18

简介

有时,我们会遇到一些需要使用字符串的匹配和查找的任务。并且我们知道这种情况下,使用正则表达式是最简洁和优雅的。为了完成某个任务特地去系统地学习正则表达式费时费力,而且一段时间不用又很容易遗忘。下次遇到问题还要再重复这个过程。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?

参考

  1. commonregex GitHub:https://github.com/mingrammer/commonregex
  2. Go 每日一库 GitHub:https://github.com/darjun/go-daily-lib


推荐阅读



学习交流 Go 语言,扫码回复「进群」即可


站长 polarisxu

自己的原创文章

不限于 Go 技术

职场和创业经验


Go语言中文网

每天为你

分享 Go 知识

Go爱好者值得关注



浏览 26
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报