如何以这种方式拆分字符串?

我需要在 golang 中拆分像“aa bb cc dd ee ff”这样的字符串

["aa bb" "bb cc" "cc dd" "dd ee" "ee ff"]

我正在尝试这个:

re := regexp.MustCompile("[a-z]+\\s+[a-z]+")
fmt.Printf("%q\n", re.FindAllString("aa bb cc dd ee ff", -1))

但它返回:

["aa bb" "cc dd" "ee ff"]


牧羊人nacy
浏览 192回答 3
3回答

DIEA

例如,package mainimport (    "fmt"    "strings")func pairs(s string) []string {    var p []string    fs := strings.Fields(s)    if len(fs) >= 2 {        p = make([]string, 0, len(fs)-1)        for i, f := range fs[1:len(fs)] {            p = append(p, fs[i]+" "+f)        }    }    return p}func main() {    s := "aa bb cc dd ee ff"    fmt.Printf("%q\n", s)    p := pairs(s)    fmt.Printf("%q\n", p)}输出:"aa bb cc dd ee ff"["aa bb" "bb cc" "cc dd" "dd ee" "ee ff"]

Cats萌萌

解决方案 ( (?=([a-z]{2}\s+[a-z]{2})*)) 需要向前看,而这在 go 中不可用

繁华开满天机

你可以用一个迭代bufio.Scanner:package mainimport (   "bufio"   "strings")func abc(data []byte, eof bool) (int, []byte, error) {   if eof {      return 0, nil, nil   }   a := -1   for b, c := range data {      if c == ' ' {         if a >= 0 {            return a+1, data[:b], nil         }         a = b      }   }   return len(data), data, nil}func main() {   s := bufio.NewScanner(strings.NewReader("aa bb cc dd ee ff"))   s.Split(abc)   for s.Scan() {      println(s.Text())   }}https://golang.org/pkg/bufio#Scanner.Split
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go