登录
首页 >  Golang >  Go问答

如何在 Go 正则表达式中获取捕获组功能

来源:Golang技术栈

时间:2023-04-30 19:47:09 223浏览 收藏

从现在开始,努力学习吧!本文《如何在 Go 正则表达式中获取捕获组功能》主要讲解了golang等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!

问题内容

我正在将一个库从 Ruby 移植到 Go,并且刚刚发现 Ruby 中的正则表达式与 Go (google RE2) 不兼容。我注意到 Ruby 和 Java(加上其他语言使用 PCRE 正则表达式(perl 兼容,支持捕获组)),所以我需要重新编写我的表达式,以便它们在 Go 中编译好。

例如,我有以下正则表达式:

`(?\d{4})-(?\d{2})-(?\d{2})`

这应该接受输入,例如:

2001-01-20

捕获组允许将年、月和日捕获到变量中。要得到每个组的值,很容易;您只需使用组名索引返回的匹配数据,然后返回值。因此,例如要获取年份,类似于以下伪代码:

m=expression.Match("2001-01-20")
year = m["Year"]

这是我在表达中经常使用的一种模式,所以我有很多重写工作要做。

那么,有没有办法在 Go 正则表达式中获得这种功能?我应该如何重写这些表达式?

正确答案

我应该如何重写这些表达式?

添加一些 Ps ,定义如下:

(?P\d{4})-(?P\d{2})-(?P\d{2})

使用 .交叉引用捕获组名称re.SubexpNames()

并使用如下

package main

import (
    "fmt"
    "regexp"
)

func main() {
    r := regexp.MustCompile(`(?P\d{4})-(?P\d{2})-(?P\d{2})`)
    fmt.Printf("%#v\n", r.FindStringSubmatch(`2015-05-27`))
    fmt.Printf("%#v\n", r.SubexpNames())
}

今天关于《如何在 Go 正则表达式中获取捕获组功能》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于golang的内容请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>