在Go正则表达式中分割浮点字符串

时间:2019-04-29 07:47:59

标签: regex string go

我正在尝试使用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))

无济于事。预先感谢。

1 个答案:

答案 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"]
"" = []