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

我必须使用正则表达式和命名组来设置要分隔的行的格式。第一种格式是:

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 中正则表达式不支持后视\前视。

有没有办法用相同的正则表达式来分隔内容?


千巷猫影
浏览 93回答 1
1回答

largeQ

package mainimport (&nbsp; &nbsp; "fmt"&nbsp; &nbsp; "regexp")func myRegx(s string) (n string, o []string, v []string) {&nbsp; &nbsp; regx := regexp.MustCompile(`(\S+) \(([>=<]+)\s+([\d\.]*)(,\s+([>=<]+)\s+([\d.]+))?\)`)&nbsp; &nbsp; b := regx.FindStringSubmatch(s)&nbsp; &nbsp; n = b[1]&nbsp; &nbsp; if len(b) < 4 {&nbsp; &nbsp; &nbsp; &nbsp; o = append(o, b[2])&nbsp; &nbsp; &nbsp; &nbsp; v = append(v, b[3])&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; o = append(o, b[2])&nbsp; &nbsp; &nbsp; &nbsp; v = append(v, b[3])&nbsp; &nbsp; &nbsp; &nbsp; o = append(o, b[5])&nbsp; &nbsp; &nbsp; &nbsp; v = append(v, b[6])&nbsp; &nbsp; }&nbsp; &nbsp; return n, o, v}func main() {&nbsp; &nbsp; n, o, v := myRegx("b (>= 1.1, < 2.0)")&nbsp; &nbsp; fmt.Printf("n: %v o:%v v:%v\n", n, o, v)&nbsp; &nbsp; n, o, v = myRegx("a (>= 1.1)")&nbsp; &nbsp; fmt.Printf("n: %v o:%v v:%v\n", n, o, v)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go