golang 正则表达式基于关键字分割字符串

问题描述 投票:0回答:1

这是我的字符串,如

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)
}
regex go regex-group
1个回答
0
投票

我认为

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)(.+)`)
© www.soinside.com 2019 - 2024. All rights reserved.