1 回答
TA贡献1877条经验 获得超1个赞
您可以使用与您不需要的匹配的正则表达式模式,并将您需要提取的那些子字符串捕获到第 1 组:
(?s){{range.*?}}.*?{{end}}|{{\s*(\.[^\s{}]+)\s*}}查看正则表达式演示
细节
(?s){{range.*?}}.*?{{end}}-(?s)允许 a.匹配换行符,{{range匹配{{range,.*?尽可能少地匹配任何 0+ 字符,然后{{end}}匹配文字字符串|- 或者{{-{{子串\s*- 0+ 个空格(\.[^\s{}]+)- 第 1 组:a.,然后是除空格以外的任何 1+ 个字符,{以及}\s*- 0+ 个空格}}- 一个}}子串。
去演示:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`(?s){{range.*?}}.*?{{end}}|{{\s*(\.[^\s{}]+)\s*}}`)
str := "Message: {{ .response.message }} \nMore results: {{ .response.has_more_results }}. \nResults: \n{{range .response.results}}\n Contact name: {{.admin_contact.name.value}}\n{{end}}"
for _, match := range re.FindAllStringSubmatch(str, -1) {
fmt.Printf("%v\n", match[1])
}
}
输出:
.response.message
.response.has_more_results
- 1 回答
- 0 关注
- 185 浏览
添加回答
举报
