使用Golang正则表达式在字符串中查找数字

25

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

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

我还尝试了在正则表达式中添加分隔符,将正数作为FindAllString的第二个参数,使用仅包含数字的字符串(如“123”)作为第一个参数......

但输出始终为[]

我似乎对Go中正则表达式的工作方式有所遗漏,但无法理解。 [0-9]+不是有效的表达式吗?

2个回答

49

问题出在您的第二个整数参数上。引用自regex包文档:

这些例程需要一个额外的整数参数n;如果n >= 0,则函数最多返回n个匹配项/子匹配项。

您传递了0,因此最多只会返回0个匹配项;也就是说:没有(不太有用)。

尝试传递-1表示您想要全部匹配项。

示例:

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

输出:

[123 987]

可以在Go Playground上进行尝试。


哇,我确信我至少尝试过使用 1,但看起来我当时有另一个错误,现在无法再现了。 -1 很好用,谢谢。 - Fabian Schmengler
regexp.MustCompile("\\d+") - Josh Hibschman

0

@icza的答案非常适用于获取正数,但是如果你有一个包含负数的字符串,就像下面这样

"abc-123def987asdf"

你期望的输出如下

[-123 987]

使用以下内容替换正则表达式

re := regexp.MustCompile(`[-]?\d[\d,]*[\.]?[\d{2}]*`)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接