首页 > 其他分享 >Go每日一库之53:commonregex

Go每日一库之53:commonregex

时间:2023-09-28 14:37:19浏览次数:272  
标签:Println text fmt list 53 一库 Go com commonregex

简介

有时,我们会遇到一些需要使用字符串的匹配和查找的任务。并且我们知道这种情况下,使用正则表达式是最简洁和优雅的。为了完成某个任务特地去系统地学习正则表达式费时费力,而且一段时间不用又很容易遗忘。下次遇到问题还要再重复这个过程。commonregex库来了,它内置很多常用的正则表达式,开箱即用。当然,我并不是说没必要去学习正则表达式,熟练掌握正则表达式需要时间和练习,对于时长和文本处理打交道的开发人员,正则表达式决定是提升工作效率的一把利器。

快速使用

本文代码使用 Go Modules。

创建目录并初始化:

$ mkdir commonregex && cd commonregex
$ go mod init github.com/go-quiz/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 [email protected]`

  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 [email protected]]
phone list: [(519)-236-2723x341]
email list: [[email protected]]

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/go-quiz/go-daily-lib

标签:Println,text,fmt,list,53,一库,Go,com,commonregex
From: https://www.cnblogs.com/arena/p/17735713.html

相关文章

  • Go每日一库之52:commonregex
    简介有时,我们会遇到一些需要使用字符串的匹配和查找的任务。并且我们知道这种情况下,使用正则表达式是最简洁和优雅的。为了完成某个任务特地去系统地学习正则表达式费时费力,而且一段时间不用又很容易遗忘。下次遇到问题还要再重复这个过程。commonregex库来了,它内置很多常用的正......
  • Go每日一库之51:gabs
    简介JSON是一种非常流行的数据交换格式。每种编程语言都有很多操作JSON的库,标准库、第三方库都有。Go语言中标准库内置了JSON操作库encoding/json。我们之前也介绍过专门用于查询JSON串的库gjson和专门用于修改JSON串的库sjson,还有一个非常方便的操作JSON数据的命令......
  • Go每日一库之50:jobrunner
    简介我们在Web开发中时常会遇到这样的需求,执行一个操作之后,需要给用户一定形式的通知。例如,用户下单之后通过邮件发送电子发票,网上购票支付后通过短信发送车次信息。但是这类需求并不需要非常及时,如果放在请求流程中处理,会影响请求的响应时间。这类任务我们一般使用异步的方式......
  • Go每日一库之49:mapstructure
    简介mapstructure用于将通用的map[string]interface{}解码到对应的Go结构体中,或者执行相反的操作。很多时候,解析来自多种源头的数据流时,我们一般事先并不知道他们对应的具体类型。只有读取到一些字段之后才能做出判断。这时,我们可以先使用标准的encoding/json库将数据解码为map......
  • Go每日一库之70:termtables
    简介今天学个简单点的,termtables处理表格形式数据的输出。适用于随时随地的输出一些状态或统计数据,便于观察和调试。是一个很小巧的工具库。我在学习dateparse库时偶尔见遇到了这个库。快速使用本文代码使用GoModules。创建目录并初始化:$mkdirtermtables&&cdtermtable......
  • Go每日一库之69:resty
    简介resty是Go语言的一个HTTPclient库。resty功能强大,特性丰富。它支持几乎所有的HTTP方法(GET/POST/PUT/DELETE/OPTION/HEAD/PATCH等),并提供了简单易用的API。快速使用本文代码使用GoModules。创建目录并初始化:$mkdirresty&&cdresty$gomodinitgithub.com/......
  • golang-channel
    什么是channel管道channel是goroutine与goroutine之间通信的重要桥梁channel是一个通道,用于端到端的数据传输,这有点像我们平常使用的消息队列,只不过channel的发送方和接受方是 goroutine 对象,属于内存级别的通信。这里涉及到了goroutine概念,goroutine是轻量级的......
  • gom引擎微端架设教程
    在配置GOM微端之前呢,首先我们需要在服务器里面准备好1.传奇版本2.版本配套的补丁3.完整传奇客户端(推荐使用15到17周年的)4.微端程序。这些准备好,下面我们就可以直接架设了。首先呢需要把版本解压到D盘,然后把补丁解压到客户端里面,接着我们打开引擎包,引擎包里面有微端程序给程序放到桌......
  • GO基础环境搭建GoLand
    一、GO官方资料官网:https://golang.org/gosdk下载:https://golang.google.cn/dl/golang中文社区:https://studygolang.com/dl中文社区文档https://studygolang.com/pkgdoc二、开发环境配置1、GOSDK下载后,自行安装go语言开发需要使用gosdk,下载链接https://go.dev/dl/下载......
  • 基于计讯物联地灾行业应用终端设备TN531系列终端机的地质灾害监测解决方案
    方案背景我国由于地质和地理环境复杂,气候条件时空差异大,多年来饱受滑坡、泥石流、崩塌、地面塌陷和裂缝等地质灾害的巨大影响。因此,加强地质灾害的监测与预警刻不容缓。  计讯物联以数字化与信息化为原则,以物联网创新技术为手段,自主研发基于地灾行业应用终端设备TN531系列......