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

在 golang 中使用正则表达式将括号内的数据拆分为命名组

在 golang 中使用正则表达式将括号内的数据拆分为命名组

Go
千巷猫影 2023-03-07 16:33:37
我必须使用正则表达式和命名组来设置要分隔的行的格式。第一种格式是:a (>= 1.1)第二种格式是:b (>= 1.1, < 2.0)我想创建组,每个操作员都有一个匹配的版本,并在括号外标记字母。例如:n-> b o1 -> >= v1 -> 1.1 o2 -> < v2 -> 2.0我已经尝试并创建了以下正则表达式:(?P<n>\S+) *(\(((?P<o>[>=<~]?[>=<~])? (?P<v>\S+))*\))?\s*$但是我无法将括号内的文本分开。请注意,在 GO 中正则表达式不支持后视\前视。有没有办法用相同的正则表达式来分隔内容?
查看完整描述

1 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

package main


import (

    "fmt"

    "regexp"

)


func myRegx(s string) (n string, o []string, v []string) {

    regx := regexp.MustCompile(`(\S+) \(([>=<]+)\s+([\d\.]*)(,\s+([>=<]+)\s+([\d.]+))?\)`)

    b := regx.FindStringSubmatch(s)

    n = b[1]

    if len(b) < 4 {

        o = append(o, b[2])

        v = append(v, b[3])

    } else {

        o = append(o, b[2])

        v = append(v, b[3])

        o = append(o, b[5])

        v = append(v, b[6])

    }

    return n, o, v

}


func main() {

    n, o, v := myRegx("b (>= 1.1, < 2.0)")

    fmt.Printf("n: %v o:%v v:%v\n", n, o, v)

    n, o, v = myRegx("a (>= 1.1)")

    fmt.Printf("n: %v o:%v v:%v\n", n, o, v)

}


查看完整回答
反对 回复 2023-03-07
  • 1 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

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