我有一个Go程序,需要在多个字符串中搜索特定的模式。这些字符串都是这样的:
Destination: 149.164.31.169 (149.164.31.169)
我希望只提取 IP
149.164.31.169
,无论是中间的还是括号里的,它们将始终相同。在 Java 中,我会使用字符串分割器来收集我需要的字符串部分,但我没有在 Go 中找到类似的函数。有人知道我该如何实现吗?你可以直接按空格分割并取中间的一个:
s := "Destination: 149.164.31.169 (149.164.31.169)"
parts := strings.Split(s, " ")
if len(parts) != 3 {
panic("Should have had three parts")
}
println(parts[1])
还有很多其它方法。要找的地方是strings
包。当然,如果你需要更复杂的东西,可以看看regex
库用于正则表达式,但这在这里就大材小用了。如果你真的需要一个分词器,可以看看text/scanner
,但对于这个来说就太过头了。
你也可以使用fmt.Sscanf
来实现:
package main
import "fmt"
func extractIP(s string) string {
var ip string
fmt.Sscanf(s, "Destination: %v", &ip)
return ip
}
func main() {
ip := extractIP("Destination: 149.164.31.169 (149.164.31.169)")
fmt.Println(ip == "149.164.31.169")
}