为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Go 中使用/访问捕获组?

如何在 Go 中使用/访问捕获组?

Go
神不在的星期二 2023-07-10 14:33:37
我有一个日期格式为 dd.mm.yyyy 的文件(例如 31.12.2019)。我想转换成格式yyyy-mm-dd(例如2019-12-31)。在 Notepad++ 中,我可以使用反向引用对这些字符串进行搜索和替换:搜索:(\d{2}).(\d{2}).(\d{4})代替:\3-\2-\1我该如何使用 Go 来做到这一点?
查看完整描述

2 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

您可以通过切片输入字符串并以不同的顺序组装各个部分来完成此操作:


func transform(s string) string {

    d, m, y := s[:2], s[3:5], s[6:]

    return y + "-" + m + "-" + d

}

注意:上面的函数不会验证输入,如果输入短于 6 个字节,它可能会出现错误。


如果您需要输入验证(包括日期验证),您可以使用该time包来解析日期,并将其格式化为您期望的输出:


func transform2(s string) (string, error) {

    t, err := time.Parse("02.01.2006", s)

    if err != nil {

        return "", err

    }

    return t.Format("2006-01-02"), nil

}

测试以上功能:


fmt.Println(transform("31.12.2019"))

fmt.Println(transform2("31.12.2019"))

输出(在 Go Playground 上尝试一下):


2019-12-31

2019-12-31 <nil>


查看完整回答
反对 回复 2023-07-10
?
桃花长相依

TA贡献1860条经验 获得超8个赞

正则表达式可能有点矫枉过正,因为您有如此明确定义的输入。这个怎么样:

  var dmy = strings.Split("31.12.2019",".")
  var mdy = []string{dmy[1],dmy[0],dmy[2]}
  fmt.Println(strings.Join(mdy, "-"))

https://play.golang.org/p/Ak3TlCAGHUv


查看完整回答
反对 回复 2023-07-10
  • 2 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信