【问题标题】:Splitting float string in Go regex在 Go 正则表达式中拆分浮点字符串
【发布时间】:2019-09-17 19:41:33
【问题描述】:

我正在尝试使用 Golang 的正则表达式将某个字符串类型拆分为其组成部分。

我所拥有的是任何给定浮点数的Sprinf(".2f", n)(将其简化为小数点后 2 位),并且希望将百分位数字分开,例如:

"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))

无济于事。提前致谢。

【问题讨论】:

标签: regex string go


【解决方案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"]
"" = []

【讨论】:

    猜你喜欢
    • 2011-05-26
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多