猿问

如何用 Go regexp 中的计数器替换出现的字符串?

例如,在这句话中,

Let freedom ring from the mighty mountains of New York. Let freedom ring from the heightening Alleghenies of Pennsylvania. Let freedom ring from the snow-capped Rockies of Colorado. Let freedom ring from the curvaceous slopes of California.

如何用“让自由”代替

“[1] 让自由”,“[2] 让自由2”,等等。

我搜索了 Go regexp 包,没有找到任何相关的增加计数器。(只找到ReplaceAllStringFunc,但我不知道如何使用它。)


紫衣仙女
浏览 205回答 2
2回答

眼眸繁星

你需要这样的东西r, i := regexp.MustCompile("Let freedom"), 0r.ReplaceAllStringFunc(input, func(m string) string {   i += 1   if i == 1 {     return "[1]" + m    }   return fmt.Sprintf("[%d] %s%d", i, m, i)})确保您已导入所需的包。以上通过Let freedom用作正则表达式然后使用一些条件返回预期的内容来工作。

繁星淼淼

您需要以某种方式在对函数的连续调用之间共享计数器。一种方法是构造闭包。你可以这样做:package mainimport (    "fmt"    "regexp")func main() {    str := "Let freedom ring from the mighty mountains of New York. Let freedom ring from the heightening Alleghenies of Pennsylvania. Let freedom ring from the snow-capped Rockies of Colorado. Let freedom ring from the curvaceous slopes of California."    counter := 1    repl := func(match string) string {        old := counter        counter++        if old != 1 {            return fmt.Sprintf("[%d] %s%d", old, match, old)        }        return fmt.Sprintf("[%d] %s", old, match)    }    re := regexp.MustCompile("Let freedom")    str2 := re.ReplaceAllStringFunc(str, repl)    fmt.Println(str2)}
随时随地看视频慕课网APP

相关分类

Go
我要回答