【问题标题】:Find numbers in string using Golang regexp使用 Golang 正则表达式在字符串中查找数字
【发布时间】:2015-10-07 08:21:48
【问题描述】:

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

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

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

但输出总是[]

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

【问题讨论】:

    标签: regex go


    【解决方案1】:

    问题在于您的第二个整数参数。引用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 尝试过它,但看起来我有另一个错误,无法再重现它。 -1 效果很好,谢谢
    【解决方案2】:

    @icza 的答案非常适合获取正数,但是,如果您有一个包含负数的字符串,也如下所示

    "abc-123def987asdf"
    

    你期待下面的输出

    [-123 987]
    

    用下面替换正则表达式

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 2019-11-03
      • 2016-07-26
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多