卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章34706本站已运行393

如何改进golang中的分割逻辑

如何改进golang中的分割逻辑

在golang中,分割字符串是一个常见的操作,然而,有时候我们可能会遇到一些分割逻辑上的问题。那么,如何改进golang中的分割逻辑呢?在本文中,php小编鱼仔将为您介绍一些实用的技巧和方法,帮助您优化和改进golang中的分割逻辑,让您的代码更加高效和可靠。让我们一起来探索吧!

问题内容

将以下示例作为索引中的可能值:

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: %qn", value)
            fmt.Printf("UNIT: %qn", strings.TrimSpace(regexFloatNumbers.Split(value, -1)[1]))
            fmt.Printf("FLOAT VALUE: %vnn", floatValue)
        } else {
            fmt.Printf("float value for %v has not being found!", value)
        }

    }

}

解决方法

正则表达式似乎很适合这里。就我个人而言,我会为此使用子组,就像这样(我还清理了你的正则表达式,其中有一些不必要的语法,并且看起来像是 [d{2}]* 的拼写错误):

regexFloatNumbers := regexp.MustCompile(`(-?d[d,]*.?d*) *(.*)`)

// ...

floatValue := regexFloatNumbers.FindStringSubmatch(value)
fmt.Printf("ORIGINAL VALUE: %qn", value)
fmt.Printf("UNIT: %qn", floatValue[1])
fmt.Printf("FLOAT VALUE: %vnn", floatValue[2])

https://www.php.cn/link/8af0c75579a632c9207e51657de43c7c

卓越飞翔博客
上一篇: 有没有办法在没有 NewController 的情况下创建新的 gomock 控制器?
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏