如何在复杂的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.nn。nn是可选的。

(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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Javascript中的正则表达式中捕获特定的捕获组?

正则表达式:捕获组中的捕获组

捕获组中的正则表达式捕获组

如何捕获正则表达式中的可选组?

如何在一个正则表达式中捕获所有正则表达式组?

复杂正则表达式与捕获组的匹配

如何在perl的if语句中捕获多个用逻辑AND分隔的正则表达式组?

使用Python正则表达式在非捕获组中的多个捕获组

正则表达式:多个捕获中的多个捕获

Python正则表达式-如何从通配符表达式捕获多个组?

嵌套捕获组如何在正则表达式中编号?

如何在正则表达式中创建动态捕获组?

如何在Java正则表达式中包含命名捕获组?

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

如何在Javascript正则表达式中捕获组?

java解析正则表达式多个捕获组

python正则表达式多个可选捕获组

正则表达式,贪婪量词多个捕获组

如何在多个可选的捕获分组正则表达式中不包含前导空格

如何在Perl正则表达式中捕获字符串的多个“伙伴”?

高级正则表达式-在替换中捕获整个复杂的语句组

正则表达式组捕获

正则表达式捕获组

正则表达式,捕获组

正则表达式捕获组

正则表达式从一个通用正则表达式中获取多个捕获组

尝试在正则表达式中捕获多个组,同时跳过其他组

正则表达式:如何添加捕获组?

如何获得正则表达式捕获组的价值?