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 关注
- 100 浏览
添加回答
举报