我正在尝试使用Golang的正则表达式将某种字符串类型拆分为其组成部分。
我所拥有的是任何给定浮点数的Sprinf(".2f", n)
(将其简化为两位小数),并且希望像这样分隔百分位数:
"1.25" = ["1.2", "5"]
"1.99" = ["1.9", "9"]
在PHP中,这类似于:
preg_match('/^ (\-? \d [.] \d) (\d) $/x', sprintf('%1.2f', $input), $matches)
我可以通过$ matches [0]和$ matches [1]来获得零件。
尝试过:
re := regexp.MustCompile(`/^ (\-? \d [.] \d) (\d) $/x`)
fmt.Printf("%q\n", re.FindAllStringSubmatch("1.50", 2))
无济于事。预先感谢。
答案 0 :(得分:1)
为什么要为此使用正则表达式?只需对字符串进行切片:
func split(s string) []string {
if len(s) == 0 {
return nil
}
return []string{s[:len(s)-1], s[len(s)-1:]}
}
测试:
nums := []string{
fmt.Sprintf("%.2f", 1.25),
fmt.Sprintf("%.2f", 1.99),
fmt.Sprintf("%.2f", 1.25),
fmt.Sprintf("%.2f", 1.2),
fmt.Sprintf("%.2f", 0.0),
fmt.Sprintf("%.2f", -1.2),
"",
}
for _, n := range nums {
fmt.Printf("%q = %q\n", n, split(n))
}
输出(在Go Playground上尝试):
"1.25" = ["1.2" "5"]
"1.99" = ["1.9" "9"]
"1.25" = ["1.2" "5"]
"1.20" = ["1.2" "0"]
"0.00" = ["0.0" "0"]
"-1.20" = ["-1.2" "0"]
"" = []