Go语言:将字符串分解为标记的方法

4

我有一个Go程序,需要在多个字符串中搜索特定的模式。这些字符串都是这样的:

 Destination: 149.164.31.169 (149.164.31.169) 

我希望只提取 IP 149.164.31.169,无论是中间的还是括号里的,它们将始终相同。在 Java 中,我会使用字符串分割器来收集我需要的字符串部分,但我没有在 Go 中找到类似的函数。有人知道我该如何实现吗?
2个回答

20

你可以直接按空格分割并取中间的一个:

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,但对于这个来说就太过头了。


谢谢,这很好用,而且与分词器非常相似。 - btald1331
我们如何处理多个分隔符? - insanely_sin

0

你也可以使用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")
}

https://golang.org/pkg/fmt#Sscanf


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接