1 回答
TA贡献1852条经验 获得超7个赞
您可以使用正则表达式使用单个表达式捕获这两个值。FindStringSubmatch:
func NewObjectSizeFromString(input_str string) (*ObjectSize, error) {
var defaultReturn *ObjectSize = nil
full_search_pattern := `^([0-9]+)([KMGT]?B)$`
rg, err := regexp.Compile(full_search_pattern)
if err != nil {
return defaultReturn, errors.New("Could not compile search expression")
}
matched := rg.FindStringSubmatch(input_str)
if matched == nil {
return defaultReturn, errors.New("Not in valid format")
}
i, err := strconv.ParseInt(matched[1], 10, 32)
return &ObjectSize{int(i), SizeUnit(matched[2])}, nil
}
正则表达式匹配^([0-9]+)([KMGT]?B)$
^- 字符串的开头([0-9]+)- 组 1(此值将保存在):一个或多个数字matched[1]([KMGT]?B)- 组 2 (它将在): 一个可选的 , , , 字母, 然后是一个字母matched[2]KMGTB$- 字符串末尾。
请注意,这将保持整个比赛。matched[0]
- 1 回答
- 0 关注
- 123 浏览
添加回答
举报
