gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:12:39 25 4
gpt4 key购买 nike

我的正则表达式有点麻烦。
给定以下文本行,我想创建一个正则表达式来捕获
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

关于regex - 如何在复杂的golang正则表达式捕获中捕获多个组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62567767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com