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

不区分大小写的字符串和数组(as string)替换为 Go 中使用正则表达式

不区分大小写的字符串和数组(as string)替换为 Go 中使用正则表达式

Go
米脂 2022-08-24 17:06:24
我有一个案例,我需要对Go(json)字符串中的字符串进行不区分大小写的替换。替换可以是以下情况搜索字符串: ;替换字符串SOME_SEARCH_STRINGREPLACEMENT_STRING搜索字符串: ;替换字符串"[\"SOME_SEARCH_STRING\"]""[\"INTv2RPACS\"]"我有以下作为我的正则表达式pattern := fmt.Sprintf(`(%s)`, searchString)pat := regexp.MustCompile("(?i)" + pattern)content = pat.ReplaceAllString(content, replacementString)当搜索和替换字符串值是简单字符串时,上述内容似乎工作正常,但是当搜索是替换值数组时,上述操作似乎可以正常工作(例如上面的 #2)。我需要做什么正则表达式更新才能替换数组?
查看完整描述

2 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

使用正则表达式。QuoteMeta 在搜索字符串中引用元字符。


pattern := fmt.Sprintf(`(%s)`, regexp.QuoteMeta(searchString))

pat := regexp.MustCompile("(?i)" + pattern)

content = pat.ReplaceAllString(content, replacementString)


查看完整回答
反对 回复 2022-08-24
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

package main


import (

    "fmt"

    "regexp"

)


type rep struct {

    from string

    to   string

}


func replace(str string, reps []rep) (result string) {

    result = str


    for i := range reps {

        rx := regexp.MustCompile(fmt.Sprintf("(?i)(%s)", regexp.QuoteMeta(reps[i].from)))

        result = rx.ReplaceAllString(result, reps[i].to)

    }

    return

}


func main() {

    content := `

{

    "key_1": "SoME_SEArCH_STRING",

    "key_2": "some_some_SEARCH_STRING_string",

    "key_3": ["SOME_SEARCH_STRING"],

    "key_4": "aBc"

}`


    var replaces = []rep{

        {`["SOME_SEARCH_STRING"]`, `["INTv2RPACS"]`},// important: array replacements before strings

        {`SOME_SEARCH_STRING`, `REPLACEMENT_STRING`},

    }


    fmt.Println(content)

    fmt.Println(replace(content, replaces))

}

output:


{

    "key_1": "SoME_SEArCH_STRING",

    "key_2": "some_some_SEARCH_STRING_string",

    "key_3": ["SOME_SEARCH_STRING"],

    "key_4": "aBc"

}


{

    "key_1": "REPLACEMENT_STRING",

    "key_2": "some_REPLACEMENT_STRING_string",

    "key_3": ["INTv2RPACS"],

    "key_4": "aBc"

}


查看完整回答
反对 回复 2022-08-24
  • 2 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

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