为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
牧羊人nacy 2021-11-08 18:29:27
我需要在 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"]
查看完整描述

3 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

例如,


package main


import (

    "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"]


查看完整回答
反对 回复 2021-11-08
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

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


查看完整回答
反对 回复 2021-11-08
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

你可以用一个迭代bufio.Scanner:


package main


import (

   "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


查看完整回答
反对 回复 2021-11-08
  • 3 回答
  • 0 关注
  • 191 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信