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

标签 regex string go replace

<分区>

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

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

搜索:

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

替换:

\3-\2-\1

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

最佳答案

您可以通过对输入字符串进行 slice ,然后按不同顺序组装各个部分来实现:

func transform(s string) string {
    d, m, y := s[:2], s[3:5], s[6:]
    return y + "-" + m + "-" + d
}

注意:上述函数不验证输入,如果输入短于 6 个字节,它可能会 panic。

如果您需要输入验证(包括日期验证),您可以使用 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>

关于regex - 我如何在 Go 中使用/访问捕获组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57311842/

相关文章:

java - 取出一个字段的第一行,在Logstash 1.4.0中添加为新字段

android - 如何将字符串数组元素转换为整数值?

go - 如何在路由函数之间传递 var 并在每个 Controller 中更改它?

mysql - 如何使用Golang将值插入decimal(65,0)并从数据库中检索它们?

go: 如果无法删除src中的源文件,为什么还需要pkg目录?

python从文本文件中提取数字并将它们存储在列表列表中

python - 捕获由重复组组成的整个匹配项的正则表达式

javascript - 正则表达式或 jquery 在特定字符后拆分字符串

ruby-on-rails - 返回 : Localised Message String Variable Substitution

c++ - 使用stringstream.fail()检查输入是int还是string