gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:24:48 25 4
gpt4 key购买 nike

假设我有一些带有如下占位符的模板文本:

Message: {{ .response.message }}  
More results: {{ .response.has_more_results }}.
Results:
{{range .response.results}}
Contact name: {{.admin_contact.name.value}}
{{end}}

我想创建一个正则表达式来提取不在 {{range ...}} .... {{end}} 内的占位符部分。所以在上面的例子中,我想得到 .response.message.response.has_more_results .

我想出了以下正则表达式: {{\s?(\.\S*?)\s?}}但这也吸引了 .admin_contact.name.value我想排除。

如何使用正则表达式仅提取 range 之外的占位符部分?

最佳答案

您可以使用与您不需要的匹配的正则表达式模式,并将您需要提取的那些子字符串捕获到第 1 组:

(?s){{range.*?}}.*?{{end}}|{{\s*(\.[^\s{}]+)\s*}}

regex demo

详情
  • (?s){{range.*?}}.*?{{end}} - (?s)启用 .匹配换行符,{{range匹配 {{range , .*?尽可能少地匹配任何 0+ 个字符,然后 {{end}}匹配文字字符串
  • | - 或
  • {{ - {{子串
  • \s* - 0+ 个空格
  • (\.[^\s{}]+) - 第 1 组:一个 .然后是除空格之外的任何 1+ 个字符,{}
  • \s* - 0+ 个空格
  • }} - 一个 }}子串。

  • Go demo :
    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

    关于regex - 查找不在另一个文本字符串中的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60713431/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com