下面的例子是指数中可能的值:
values := [5]string{"32.5ms", "32.5 ms", "32.5%", "32.5 %", "none"}
请注意,原始值可以带有空格,也可以不带有空格(32.5%、32.5%、32.5%等)
我需要从原始值中分离浮点值和度量单位(%,ms等),下面的代码,做我想要的结果,但我想知道是否有一些更干净的方法来做同样的逻辑,也许没有正则表达式。
package main
import (
"fmt"
"regexp"
"strings"
)
func main() {
regexFloatNumbers := regexp.MustCompile(`[-]?\d[\d,]*[\.]?[\d{2}]*`)
values := [5]string{"32.5ms", "32.5 ms", "32.5%", "32.5 %", "none"}
for _, value := range values {
if regexFloatNumbers.MatchString(value) {
floatValue := regexFloatNumbers.FindString(value)
fmt.Printf("ORIGINAL VALUE: %q\n", value)
fmt.Printf("UNIT: %q\n", strings.TrimSpace(regexFloatNumbers.Split(value, -1)[1]))
fmt.Printf("FLOAT VALUE: %v\n\n", floatValue)
} else {
fmt.Printf("float value for %v has not being found!", value)
}
}
}
1条答案
按热度按时间yv5phkfx1#
正则表达式看起来很适合这里,我个人会使用子群,比如(我还清理了你的正则表达式,它有一些不必要的语法,看起来像是
[\d{2}]*
的拼写错误):https://go.dev/play/p/S6Jig4V4OVs