为了账号安全,请及时绑定邮箱和手机立即绑定

查找不在另一个文本字符串中的文本?

查找不在另一个文本字符串中的文本?

Go
尚方宝剑之说 2022-05-23 15:30:51
假设我有一些带有如下占位符的模板文本:Message: {{ .response.message }}  More results: {{ .response.has_more_results }}. Results: {{range .response.results}}   Contact name: {{.admin_contact.name.value}}{{end}}我想创建一个正则表达式来提取不在部分内的占位符{{range ...}} .... {{end}}。所以在上面的例子中,我想得到.response.messageand .response.has_more_results。我想出了以下正则表达式:{{\s?(\.\S*?)\s?}}但这也.admin_contact.name.value包含我想排除的内容。如何使用正则表达式仅提取range部分之外的占位符?
查看完整描述

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


查看完整回答
反对 回复 2022-05-23
  • 1 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信