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

我有一个日期格式为 dd.mm.yyyy 的文件(例如 31.12.2019)。我想转换成格式yyyy-mm-dd(例如2019-12-31)。

在 Notepad++ 中,我可以使用反向引用对这些字符串进行搜索和替换:

搜索:

(\d{2}).(\d{2}).(\d{4})

代替:

\3-\2-\1

我该如何使用 Go 来做到这一点?



神不在的星期二
浏览 150回答 2
2回答

叮当猫咪

您可以通过切片输入字符串并以不同的顺序组装各个部分来完成此操作:func transform(s string) string {&nbsp; &nbsp; d, m, y := s[:2], s[3:5], s[6:]&nbsp; &nbsp; return y + "-" + m + "-" + d}注意:上面的函数不会验证输入,如果输入短于 6 个字节,它可能会出现错误。如果您需要输入验证(包括日期验证),您可以使用该time包来解析日期,并将其格式化为您期望的输出:func transform2(s string) (string, error) {&nbsp; &nbsp; t, err := time.Parse("02.01.2006", s)&nbsp; &nbsp; if err != nil {&nbsp; &nbsp; &nbsp; &nbsp; return "", err&nbsp; &nbsp; }&nbsp; &nbsp; return t.Format("2006-01-02"), nil}测试以上功能:fmt.Println(transform("31.12.2019"))fmt.Println(transform2("31.12.2019"))输出(在 Go Playground 上尝试一下):2019-12-312019-12-31 <nil>

桃花长相依

正则表达式可能有点矫枉过正,因为您有如此明确定义的输入。这个怎么样:&nbsp;&nbsp;var&nbsp;dmy&nbsp;=&nbsp;strings.Split("31.12.2019",".") &nbsp;&nbsp;var&nbsp;mdy&nbsp;=&nbsp;[]string{dmy[1],dmy[0],dmy[2]} &nbsp;&nbsp;fmt.Println(strings.Join(mdy,&nbsp;"-"))https://play.golang.org/p/Ak3TlCAGHUv
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go