如何在复杂的 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

最新更新