我正在尝试解析以下字符串:
`%%% 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)
}
}
}
给出:
part: %%% First %%% part 1 %%% Second %%%
如何获取输出,使其打印如下,其中第1部分和第2部分是单独的匹配组?我想忽略&#34; First&#34;完全专注于&#34; Second&#34;:
part 2
答案 0 :(得分:3)
这假设您尝试捕获的碎片遵循%%% 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])
}
}
这将打印出来:
part: part 1
part: part2
part: wobble wobble
答案 1 :(得分:1)
请勿使用正则表达式,请使用拆分
package main
import (
"fmt"
"strings"
)
func main() {
example := `%%% First %%% part 1 %%% Second %%% part2`
other := strings.Split(example, "%%%")
fmt.Println(other)
}