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

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

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

Go
紫衣仙女 2021-09-10 18:13:13
例如,在这句话中,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,但我不知道如何使用它。)
查看完整描述

2 回答

?
眼眸繁星

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

你需要这样的东西


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用作正则表达式然后使用一些条件返回预期的内容来工作。


查看完整回答
反对 回复 2021-09-10
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

您需要以某种方式在对函数的连续调用之间共享计数器。一种方法是构造闭包。你可以这样做:


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)

}


查看完整回答
反对 回复 2021-09-10
  • 2 回答
  • 0 关注
  • 204 浏览
慕课专栏
更多

添加回答

举报

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