我有一个表示计算机对象大小的结构。此结构的对象是根据用户输入的字符串值构造的;例如,“50KB”将被标记化为int值“50”和字符串值“KB”。
type SizeUnit string
const (
B = "B"
KB = "KB"
MB = "MB"
GB = "GB"
TB = "TB"
)
type ObjectSize struct {
NumberOfUnits int
Unit SizeUnit
}
func NewObjectSizeFromString(input_str string) (*ObjectSize, error)
在这个函数的主体中,我首先检查输入值是否为有效格式;即任意位数,后跟“B”、“KB”、“MB”、“GB”或“TB”中的任何一位。然后,我分别提取 int 和字符串组件,并返回指向结构的指针。
为了做这三件事,我不得不编译正则表达式三次。第一次检查输入字符串的格式
rg, err := regexp.Compile(`^[0-9]+B$|KB$|MB$|GB$|TB$`)
然后再次编译以获取int组件:
rg, err := regexp.Compile(`^[0-9]+`)
rg.FindString(input_str)
然后再次编译以获取字符串/单位组件:
rg, err := regexp.Compile(`B$|KB$|MB$|GB$|TB$`)
rg.FindString(input_str)
有没有办法通过单个正则表达式编译从输入字符串中获取两个组件?
完整的代码可以在Go Playground上找到。
我应该指出,这是一个学术问题,因为我正在试验Go的正则表达式库。对于这种类型的简单用例,我可能会使用一个简单的for循环来解析输入字符串。
慕姐4208626
相关分类