与字符串处理相关的另一个非常常见的任务是替换字符串中的子字符串。Go标准库提供了一次替换多个字符串的 Replace功能和Replacer类型。
替换部分字符串
Golang 版本
1.12.1
前言
与字符串处理相关的另一个非常常见的任务是替换字符串中的子字符串。Go标准库提供了一次替换多个字符串的 Replace功能和Replacer类型。
实现
创建文件
replace.go
,代码如下:package main import ( "fmt" "strings" ) const refString = "Mary had a little lamb" const refStringTwo = "lamb lamb lamb lamb" func main() { out := strings.Replace(refString, "lamb", "wolf", -1) fmt.Println(out) out = strings.Replace(refStringTwo, "lamb", "wolf", 2) fmt.Println(out) }
$ go run replace.go Mary had a little wolf wolf wolf lamb lamb
创建文件
replacer.go
,代码如下:package main import ( "fmt" "strings" ) const refString = "Mary had a little lamb" func main() { replacer := strings.NewReplacer("lamb", "wolf", "Mary", "Jack") out := replacer.Replace(refString) fmt.Println(out) }
$ go run replacer.go Jack had a little wolf
创建文件
regexp.go
,代码如下:package main import ( "fmt" "regexp" ) const refString = "Mary had a little lamb" func main() { regex := regexp.MustCompile("l[a-z]+") out := regex.ReplaceAllString(refString, "replacement") fmt.Println(out) }
$ go run regexp.go Mary had a replacement replacement
原理
strings
包的Replace
函数被广泛用于简单的替换。最后一个integer
参数定义将执行多少次替换(在-1情况下,替换所有字符串。参见Replace
的第二种用法,其中只替换前两种情况。)替换函数的使用在步骤1中给出。
除了Replace
函数外,Replacer
结构体还具有WriteString
方法。 此方法将写入给定的编写器,并在Replacer
中定义所有替换。这种类型的主要目的是可重用性。它可以同时替换多个字符串,并发使用安全;参见步骤2。
替换子字符串甚至匹配模式的更复杂的方法自然是使用正则表达式。 可以利用Regex
类型指针方法ReplaceAllString
来实现此目的。 步骤3说明了regexp
包的使用。