Regex 如何创建重复捕获组?

Regex 如何创建重复捕获组?,regex,go,Regex,Go,我正在尝试分析以下字符串: `%%% First %%% part 1 %%% Second %%% part2` 这一过程会持续到未知数量的部分…例如。第三,第四,另一,汽车,飞机等。。。全部由“%%%Something%%”分隔 我有: package main import ( "fmt" "regexp" ) func main() { reg:= regexp.MustCompile(`(?P<part>%%% .* %%%)+`) m

我正在尝试分析以下字符串:

`%%% First %%% part 1 %%% Second %%% part2`
这一过程会持续到未知数量的部分…例如。第三,第四,另一,汽车,飞机等。。。全部由“%%%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)
        }
    }

}
我如何获得输出,使其像下面那样打印,其中第1部分和第2部分是单独的匹配组?我想完全忽略“第一”而只关注“第二”:


不要使用regexp,使用split

package main

import (
    "fmt"
    "strings"
)

func main() {
    example := `%%% First %%% part 1 %%% Second %%% part2`

    other := strings.Split(example, "%%%")

    fmt.Println(other)
}

不要使用regexp,使用split

package main

import (
    "fmt"
    "strings"
)

func main() {
    example := `%%% First %%% part 1 %%% Second %%% part2`

    other := strings.Split(example, "%%%")

    fmt.Println(other)
}

这就假设您试图捕获的片段遵循
%%%描述符字符串%%%%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])
    }
}
主程序包
进口(
“fmt”
“regexp”
)
func main(){
reg:=regexp.MustCompile(`%%%[^%]*%%%(?P[^%]*)`)
匹配:=reg.FindAllStringSubmatch(`%%%First%%%part 1%%%Second%%%part 2%%%Third%%%wobble%%`,-1)
如果len(匹配)=0{
fmt.Println(“未找到”)
}
对于i,z:=范围匹配{
fmt.Println(“部分:”,匹配[i][1])
}
}
这将打印出:

部分:第1部分
第二部分

部分:摆动摆动摆动

这假设您尝试捕获的片段遵循
%%%描述符字符串%%%%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])
    }
}
主程序包
进口(
“fmt”
“regexp”
)
func main(){
reg:=regexp.MustCompile(`%%%[^%]*%%%(?P[^%]*)`)
匹配:=reg.FindAllStringSubmatch(`%%%First%%%part 1%%%Second%%%part 2%%%Third%%%wobble%%`,-1)
如果len(匹配)=0{
fmt.Println(“未找到”)
}
对于i,z:=范围匹配{
fmt.Println(“部分:”,匹配[i][1])
}
}
这将打印出:

部分:第1部分
第二部分

部分:摆动摆动摆动

为什么不能在
%%
上拆分?或者,使用
*?
(惰性量词)。@Jan这是一个捕获组。每个%%%都是成对的。可能是
https://regex101.com/r/gZGIyS/1/
?为什么不能在
%%
上拆分?或者,使用
*?
(惰性量词)。@Jan这是一个捕获组。每个%%%都是成对的。可能是
https://regex101.com/r/gZGIyS/1/
?错误的做法是“第1部分”,“第2部分”是文本,将是任何内容。错误的做法是“第1部分”,“第2部分”是文本,将是任何内容。