我的目标是在没有,
的情况下捕获[]byte
的字符串化文本"2,000.00"并将其转换为float64
。问题是正则表达式使用,
捕获组MUTASI
代码
package main
import (
"bytes"
"fmt"
"regexp"
)
func main() {
mutasis := [][]byte{[]byte("28,000.00 DB"), []byte("5,000,000.00")}
re := regexp.MustCompile(`(?m)^(?P<MUTASI>[d,.]+)(?: (?P<TIPE>DB|CR))*$`)
matches := re.FindAllSubmatch(bytes.Join(mutasis, []byte("n")), -1)
for _, match := range matches {
fmt.Println(string(match[1]))
}
}
我做了什么:
- 使用
^(d+(?:[,d|.d]+)*)$
但显然,?:
被括号( )
覆盖。
试试这个
func toFloat(data []byte) (float, error) {
return strconv.ParseFloat(strings.ReplaceAll(string(data), ",", ""), 64)
}
按空格拆分原始字节数组,然后将其传递给此函数。它将返回您需要的浮点数或错误