我正在尝试解析以下字符串:
`%%% First %%% part 1 %%% Second %%% part2`
这一直持续到未知数量的部分......例如Third, Fourth, Another, Car, Airplane, etc... 都被 "%%% Something %%%"隔开
我有:
package main
import (
"fmt"
"regexp"
)
func main() {
reg:= regexp.MustCompile(`(?P<part>%%% .* %%%)+`)
match := reg.FindStringSubmatch(`%%% First %%% part 1 %%% Second %%% part2`)
if len(match) == 0 {
fmt.Println("not found")
}
for i, g := range reg.SubexpNames() {
if i == 0 || g == "" {
continue
}
switch g {
case "part":
fmt.Println("part:", match[i])
default:
fmt.Printf("what group %q", g)
}
}
}
给予:
part: %%% First %%% part 1 %%% Second %%%
如何获得输出,使其打印如下,其中第 1 部分和第 2 部分是单独的匹配组?我想完全忽略“第一”,只关注“第二”:
part 2
最佳答案
这假设您 try catch 的片段遵循 %%% Descriptor String %%% part
的格式,它只会打印部分片段。这是期待这种模式重复。
我还添加了给定字符串中缺少的结尾 %%%。
在这种模式下,收尾 %%% 并不重要,但它们也无害。
package main
import (
"fmt"
"regexp"
)
func main() {
reg := regexp.MustCompile(`%%%[^%]*%%%(?P<part>[^%]*)`)
match := reg.FindAllStringSubmatch(`%%% First %%% part 1 %%% Second %%% part2 %%% Third %%% wobble wobble %%%`, -1)
if len(match) == 0 {
fmt.Println("not found")
}
for i, _ := range match {
fmt.Println("part:", match[i][1])
}
}
这将打印出:
部分:第 1 部分
部分:第2部分
部分:摆动摆动
关于regex - 如何制作重复捕获组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48868108/