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

我有一个案例,我需要对Go(json)字符串中的字符串进行不区分大小写的替换。替换可以是以下情况

  1. 搜索字符串: ;替换字符串SOME_SEARCH_STRINGREPLACEMENT_STRING

  2. 搜索字符串: ;替换字符串"[\"SOME_SEARCH_STRING\"]""[\"INTv2RPACS\"]"

我有以下作为我的正则表达式

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

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

content = pat.ReplaceAllString(content, replacementString)

当搜索和替换字符串值是简单字符串时,上述内容似乎工作正常,但是当搜索是替换值数组时,上述操作似乎可以正常工作(例如上面的 #2)。我需要做什么正则表达式更新才能替换数组?


米脂
浏览 81回答 2
2回答

慕少森

使用正则表达式。QuoteMeta 在搜索字符串中引用元字符。pattern := fmt.Sprintf(`(%s)`, regexp.QuoteMeta(searchString))pat := regexp.MustCompile("(?i)" + pattern)content = pat.ReplaceAllString(content, replacementString)

陪伴而非守候

package mainimport (    "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"}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go