这是我的字符串,像findstudentbyid,现在我会根据像find个单词之前的find个单词和by个单词之后的by,id这样的关键词进行拆分.

因此,Golang regex模式为`(?i)(^find{1})(\w+)(by{1})(\w+)`

我正在try 拆分这个关键字findstudentbyid,但我有一个问题,我找不到一个确切的结果,我正在寻找. 我的预期yields 是[find student by id]

find
student
by
id

但我无法做到这一点.我确实试过这个golang code

package main

import (
    "fmt"
    "regexp"
)

func main() {

    txt := "findstudentbyid"
    re := regexp.MustCompile(`(?i)(^find{1})(\w+)(by{1})(\w+)`)
    split := re.Split(txt, -1)
    set := []string{}
    for i := range split {
        set = append(set, split[i])
    }

    fmt.Println(set)
}

推荐答案

我不认为Regexp.Split()是解决你的问题的办法,according to the documentation:

此方法返回的切片由未包含在FindAllString返回的切片中的S的所有子字符串组成.

我想您需要做的是找到子匹配项(如findstudentbyid):

子匹配0是整个表达式的匹配,子匹配1是第一个带括号的子表达式的匹配,依此类推.

所以你可以这样使用Regexp.FindStringSubmatch():

fmt.Println("result: ", re.FindStringSubmatch(txt))

result: [findstudentbyid find student by id]

我还认为您可以简化您的正则表达式,但不要忘记将其放在括号中来处理子匹配,就像注释中指出的那样:

re := regexp.MustCompile(`(find)(.+)(by)(.+)`)

Go相关问答推荐

Go Regexp:匹配完整的单词或子字符串,或者根本不匹配

Golang XML密钥名称冲突

减少在围棋中映射DTO时的重复代码量

转到http服务器头内容-类型设置为多部分/表单-数据,但在客户端获取内容-类型:文本/纯文本

使用 goroutine 比较 Golang 中的两棵树是等价的

hyperledger fabric - go:在 $PATH 中找不到可执行文件

Gorm 在自定义字符串类型上返回 scanner 错误

使用 Go 解组 SOAP 消息

从Go中的随机日期开始以天为单位获取时间

仅在工作日运行 cron

golang pic.ShowImage 为什么它不生成图像而是向我发送base64值

从 os.stdout 读取

如何使用 math/big 对 bigInt 进行取模?

如何通过组合来自不同包的接口来创建接口?

有没有办法在 golang 中定义可索引类型?

实现接口的指针的泛型类型是什么?

如何扩充 ResponseWriter 的 Header() 返回的 map

在 etcd 键值存储中禁用历史记录

Go 错误:cannot use generic type without instantiation

Golang 中的无实体函数