我想使用以下代码在字符串中找到所有数字:
re:=regexp.MustCompile("[0-9]+")
fmt.Println(re.FindAllString("abc123def", 0))
我还尝试了在正则表达式中添加分隔符,将正数作为FindAllString
的第二个参数,使用仅包含数字的字符串(如“123”)作为第一个参数......
但输出始终为[]
我似乎对Go中正则表达式的工作方式有所遗漏,但无法理解。 [0-9]+
不是有效的表达式吗?
问题出在您的第二个整数参数上。引用自regex
包文档:
这些例程需要一个额外的整数参数n;如果n >= 0,则函数最多返回n个匹配项/子匹配项。
您传递了0
,因此最多只会返回0个匹配项;也就是说:没有(不太有用)。
尝试传递-1
表示您想要全部匹配项。
示例:
re := regexp.MustCompile("[0-9]+")
fmt.Println(re.FindAllString("abc123def987asdf", -1))
输出:
[123 987]
可以在Go Playground上进行尝试。
@icza的答案非常适用于获取正数,但是如果你有一个包含负数的字符串,就像下面这样
"abc-123def987asdf"
你期望的输出如下
[-123 987]
使用以下内容替换正则表达式
re := regexp.MustCompile(`[-]?\d[\d,]*[\.]?[\d{2}]*`)
1
,但看起来我当时有另一个错误,现在无法再现了。-1
很好用,谢谢。 - Fabian Schmenglerregexp.MustCompile("\\d+")
- Josh Hibschman