go基础库之替换部分字符串

与字符串处理相关的另一个非常常见的任务是替换字符串中的子字符串。Go标准库提供了一次替换多个字符串的 Replace功能和Replacer类型。

替换部分字符串

Golang 版本

1.12.1

前言

与字符串处理相关的另一个非常常见的任务是替换字符串中的子字符串。Go标准库提供了一次替换多个字符串的 Replace功能和Replacer类型。

实现

  1. 创建文件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
    
  2. 创建文件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
    
  3. 创建文件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包的使用。