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

仅替换开头和结尾处的字符串

仅替换开头和结尾处的字符串

Go
开心每一天1111 2022-08-24 10:21:14
我想替换第一个和最后一个,但不是.aaaabcd目前,它返回,但我希望有hello hellobcd hellohello abcd hello我使用的原因是我不一定知道出现的位置和数量。但是,如果在组合字符串中,我不想替换它,而只是保持原样。Go中有什么解决方案可以解决这个问题?ReplaceAllaapackage mainimport (    "fmt"    "strings")func main() {    item := "hello"    test := "a abcd a"    s := "a"    item = strings.ReplaceAll(test, s, item)    fmt.Println(item)}输出:hello hellobcd hello游乐场: https://play.golang.org/p/D1VzvipblKu
查看完整描述

3 回答

?
扬帆大鱼

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

您可以使用正则表达式:


package main


import (

    "fmt"

    "regexp"

)


func main() {

    regexForA := regexp.MustCompile(`\ba\b`)

        test := "a abcd a"

        output := regexForA.ReplaceAllLiteralString(test,`hello`)

        fmt.Println(output)

}

输出:


hello abcd hello

用于运行此示例的 Playground 链接:https://play.golang.org/p/Cs99TrQDUtK


查看完整回答
反对 回复 2022-08-24
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

您可以将问题一分为二:首先从一开始就获取字符串,然后执行限制为 1 的普通替换。这将为您提供:


你好 abcd a


然后,反转字符串并执行相同的操作。您肯定可以对其进行更优化,但这将完成工作,并且仍然具有很强的可读性:


func Reverse(s string) (result string) {

  for _,v := range s {

    result = string(v) + result

  }

  return 

}


func main() {

    item := "hello"

    test := "a abcd a"

    s := "a"


    result := strings.Replace(test, s, item, 1)

    result = Reverse(strings.Replace(Reverse(result), s, Reverse(item), 1))


    fmt.Println(result)

}

指纹


你好 abcd 你好


请注意,您需要反转第一个输入字符串,替换,然后反转结果以使其恢复正确的顺序。


操场链接: https://play.golang.org/p/tuzxehhnEDu


查看完整回答
反对 回复 2022-08-24
?
万千封印

TA贡献1891条经验 获得超3个赞

如果我这样做,我只会拆分字符串(字符串。字段),然后基于字符串比较替换伪代码:


for i, field := range fields {

    if field == "a" {

        fields[i] = "hello"

    }

}

我在手机上写了它,从来没有测试过,但你应该理解一个概念:)


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

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号