在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: %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)
}
}
}
解决方法
正则表达式似乎很适合这里。就我个人而言,我会为此使用子组,就像这样(我还清理了你的正则表达式,其中有一些不必要的语法,并且看起来像是 [\d{2}]*
的拼写错误):
regexFloatNumbers := regexp.MustCompile(`(-?\d[\d,]*\.?\d*) *(.*)`)
// ...
floatValue := regexFloatNumbers.FindStringSubmatch(value)
fmt.Printf("ORIGINAL VALUE: %q\n", value)
fmt.Printf("UNIT: %q\n", floatValue[1])
fmt.Printf("FLOAT VALUE: %v\n\n", floatValue[2])
https://www.php.cn/link/8af0c75579a632c9207e51657de43c7c
以上就是如何改进golang中的分割逻辑的详细内容,更多请关注编程网其它相关文章!