Files
hiscaler-gox/extractx/number.go

111 lines
1.8 KiB
Go
Raw Permalink Normal View History

2025-04-08 19:16:39 +02:00
package extractx
import (
"regexp"
"strconv"
"strings"
)
var rxNumber = regexp.MustCompile(`\-?\d+[\d.,]*\d*`)
// 提取的内容默认为 1,234.56 格式的数字,未实现根据国家标准实现提取
// https://zhuanlan.zhihu.com/p/157980325
func clean(s string) string {
s = strings.TrimSpace(s)
if s == "" {
return s
}
s = strings.ReplaceAll(s, ",", "")
n := len(s)
if s[n-1:] == "." {
s = s[n-2 : n-1]
}
return s
}
func Number(s string) string {
if s == "" {
return ""
}
return clean(rxNumber.FindString(s))
}
func Numbers(s string) []string {
if s == "" {
return []string{}
}
matches := rxNumber.FindAllString(s, -1)
if matches == nil {
return []string{}
}
for i, v := range matches {
matches[i] = clean(v)
}
return matches
}
func Float64(s string) float64 {
if s = Number(s); s != "" {
if v, err := strconv.ParseFloat(s, 64); err == nil {
return v
}
}
return 0
}
func Float32(s string) float32 {
if s = Number(s); s != "" {
if v, err := strconv.ParseFloat(s, 64); err == nil {
return float32(v)
}
}
return 0
}
func Int64(s string) int64 {
if s = Number(s); s != "" {
if v, err := strconv.ParseInt(s, 10, 64); err == nil {
return v
}
}
return 0
}
func Int32(s string) int32 {
if s = Number(s); s != "" {
if v, err := strconv.ParseInt(s, 10, 32); err == nil {
return int32(v)
}
}
return 0
}
func Int16(s string) int16 {
if s = Number(s); s != "" {
if v, err := strconv.ParseInt(s, 10, 16); err == nil {
return int16(v)
}
}
return 0
}
func Int8(s string) int8 {
if s = Number(s); s != "" {
if v, err := strconv.ParseInt(s, 10, 16); err == nil {
return int8(v)
}
}
return 0
}
func Int(s string) int {
if s = Number(s); s != "" {
if v, err := strconv.ParseInt(s, 10, 16); err == nil {
return int(v)
}
}
return 0
}