使用Golang regexp在字符串中查找数字

时间:2015-10-07 08:21:48

标签: regex go

我想使用以下代码查找字符串中的所有数字:

re:=regexp.MustCompile("[0-9]+")
fmt.Println(re.FindAllString("abc123def", 0))

我还尝试在正则表达式中添加分隔符,使用正数作为FindAllString的第二个参数,使用仅数字字符串,如" 123"作为第一个参数...

但输出始终为[]

我似乎错过了一些关于正则表达式如何在Go中工作的东西,但无法绕过它。 [0-9]+不是有效的表达式吗?

2 个答案:

答案 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}]*`)