我想使用以下代码查找字符串中的所有数字:
re:=regexp.MustCompile("[0-9]+")
fmt.Println(re.FindAllString("abc123def", 0))
我还尝试在正则表达式中添加分隔符,使用正数作为FindAllString
的第二个参数,使用仅数字字符串,如" 123"作为第一个参数...
但输出始终为[]
我似乎错过了一些关于正则表达式如何在Go中工作的东西,但无法绕过它。 [0-9]+
不是有效的表达式吗?
答案 0 :(得分:22)
问题在于你的第二个整数参数。引自regex
的包文档:
这些例程采用额外的整数参数n;如果n> = 0,则该函数最多返回n个匹配/子匹配。
您传递0
,因此最多返回0个匹配项;那是: none (不是很有用)。
尝试传递-1
表示您想要所有人。
示例:
re := regexp.MustCompile("[0-9]+")
fmt.Println(re.FindAllString("abc123def987asdf", -1))
输出:
[123 987]
在Go Playground上尝试。
答案 1 :(得分:0)
@icza 答案非常适合获取正数,但是,如果您有一个包含负数的字符串,也如下所示
"abc-123def987asdf"
并且您期望输出如下
[-123 987]
用下面的替换正则表达式
re := regexp.MustCompile(`[-]?\d[\d,]*[\.]?[\d{2}]*`)