例如,在这句话中,
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
,但我不知道如何使用它。)
答案 0 :(得分:2)
你需要这样的东西
r, i := regexp.MustCompile("Let freedom"), 0
r.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
作为正则表达式,然后使用某些条件返回预期的内容。
答案 1 :(得分:0)
你需要以某种方式在你的函数的连续调用之间共享计数器。一种方法是构造闭包。你可以这样做:
package main
import (
"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)
}