如何在 Golang 中搜索和替换字符串中的文本?
我们经常需要用其他字符串替换某些字符串或所有与某个模式匹配的字符串。为了在**Golang**中实现这一点,我们可以使用 Go 标准库的**strings**包提供的原生函数,或者我们可以自己编写相应的逻辑。
在本文中,我们将看到不同的示例,其中我们将使用**strings**包中两个最常用的函数。这些函数是:
strings.Replace()
strings.ReplaceAll()
让我们首先考虑这些函数的签名,以了解更多关于它们的信息。
strings.Replace() 的语法
func Replace(s, old, new string, n int) string
上述函数的第一个参数是包含我们要与另一个字符串匹配以进行替换的子字符串的字符串。
第二个参数是我们想要用新字符串替换的子字符串。
第三个参数是我们想要替换字符串中匹配模式的字符串。
最后一个参数是我们想要替换的匹配次数。
需要注意的是,如果我们想要替换所有与模式匹配的出现次数,那么在调用**Replace**函数时,应该将**-1**作为最后一个参数传递。
让我们探索**Replace**函数的一个示例,以了解其工作原理。
示例 1
请考虑以下所示的代码。
package main import ( "fmt" "strings" ) func main() { var str string = "It is not is a string is" res := strings.Replace(str, "is", "isn't", 2) fmt.Println(res) }
输出
如果我们在上述代码上运行命令**go run main.go**,则将在终端中获得以下输出。
It isn't not isn't a string is
请注意,我们只是替换了匹配字符串的前两个出现次数。如果我们想要替换所有出现次数,则可以使用以下所示的代码。
示例 2
请考虑以下所示的代码。
package main import ( "fmt" "strings" ) func main() { var str string = "It is not is a string is" res := strings.Replace(str, "is", "isn't", -1) fmt.Println(res) }
输出
如果我们在上述代码上运行命令**go run main.go**,则将在终端中获得以下输出。
It isn't not isn't a string isn't
**strings.ReplaceAll()**函数的行为类似于**Replace()**,最后一个参数为**-1**。
示例 3
请考虑以下所示的代码。
package main import ( "fmt" "strings" ) func main() { var str string = "It is not is a string is" res := strings.ReplaceAll(str, "is", "isn't") fmt.Println(res) }
输出
如果我们在上述代码上运行命令**go run main.go**,则将在终端中获得以下输出。
It isn't not isn't a string isn't
广告