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部分”是文本,将是任何内容。