我必须使用正则表达式和命名组来设置要分隔的行的格式。第一种格式是: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)
}
- 1 回答
- 0 关注
- 92 浏览
添加回答
举报
0/150
提交
取消