登录
首页 >  Golang >  Go问答

如何在复杂的 golang 正则表达式捕获中捕获多个组

来源:stackoverflow

时间:2024-04-19 16:03:32 281浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《如何在复杂的 golang 正则表达式捕获中捕获多个组》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

我的正则表达式遇到了一些问题。

鉴于以下文本行,我想创建一个正则表达式来捕获 dll 和 tlb 文件名、括号前的文本和括号后的版本号。

enabler .net api (itl.enabler.api.dll, itl.enabler.api_pcl.dll, itl.enabler.api.tlb) v1.3.2

事实上,我希望它也捕获 *.sys、*.exe。

这是我迄今为止所拥有的与 dll 相匹配的内容。

([\w .]*.dll)

但不捕获这两个组。组中只有最后一个文件。如何让它捕获所有文件?

为了捕获版本号,我期望类似以下内容。版本的格式为 v1.2.n.n n.n 是可选的。

(v\d.{2,})

我希望能够在一行中捕获 *.dll、*.sys、*.tlb 等。 我希望扩展名不区分大小写。

所以像这样的东西就可以做到这一点。 ([\w .]*.[d|d][l|l][l|l])

--- 更新 ---

代码:

txt := "Enabler .Net API (ITL.Enabler.Api.dll, ITL.Enabler.Api_pcl.dll, ITL.Enabler.API.TLB) v1.3.2"
re := regexp.MustCompile(`(?i)([\w .]*\.dll)`)
match := re.FindStringSubmatch(txt)

for i := range match {
    fmt.Println(match[i])
}

我想要捕获的是所有 dll 版本以及以 sys、exe 和 tlb 结尾的任何文件。然后我想要版本号。

不确定如何重复捕获。它只显示最后一个 dll 条目


解决方案


我建议针对库和版本使用两种不同的正则表达式。以下代码对给定字符串执行相同的操作

package main

import (
    "fmt"
    "regexp"
)

func main() {

    txt := "Enabler .Net API (ITL.Enabler.Api.dll, ITL.Enabler.Api_pcl.dll, ITL.Enabler.API.TLB) v1.1.3"
    libRE := regexp.MustCompile(`(?i)([\w_.]+\.(dll|sys|exe|tlb))`)
    versionRE := regexp.MustCompile(`v(\d+\.)*\d+`)

    libraries := libRE.FindAllString(txt, -1)
    version := versionRE.FindString(txt)
    for _, lib := range libraries {
        fmt.Println(lib)
    }
    fmt.Println(version)
}

此处结帐代码:https://play.golang.org/p/Hh4B23biKE5

到这里,我们也就讲完了《如何在复杂的 golang 正则表达式捕获中捕获多个组》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

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