这是我的字符串,如
findstudentbyid
现在我将根据关键字进行拆分,例如 find
单词之前的 find
单词以及 by
和 by
、id
之后的单词。
所以 golang 正则表达式模式是
`(?i)(^find{1})(\w+)(by{1})(\w+)`
我正在尝试拆分此关键字
findstudentbyid
,但我有一个问题,我找不到我正在找到的确切结果。
我的预期输出是 [find student by id]
或
find
student
by
id
但我无法做到这一点。我确实尝试过这个golang代码
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()
不是适合您情况的解决方案,根据文档:
该方法返回的切片由 s 中不包含在 FindAllString 返回的切片中的所有子字符串组成。
我想你需要的是找到子匹配(如
find
、student
、by
和 id
):
子匹配 0 是整个表达式的匹配,子匹配 1 是第一个带括号的子表达式的匹配,依此类推。
所以你可以像这样使用
Regexp.FindStringSubmatch()
:
fmt.Println("result: ", re.FindStringSubmatch(txt))
result: [findstudentbyid find student by id]
我还认为你可以简化你的正则表达式,但不要忘记将其放入括号中来处理子匹配,就像评论中指出的那样:
re := regexp.MustCompile(`(find)(.+)(by)(.+)`)