为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Golang 正则表达式查找一个整数后跟一个字符串

使用 Golang 正则表达式查找一个整数后跟一个字符串

Go
肥皂起泡泡 2023-03-21 15:15:30
我想找到一个后跟术语“价格:”的整数,无论是在输出中,我只需要打印必须排除术语“价格:”的整数。现在,我的代码是这样的,输出是 [Price: 100],但我只需要输出 100。package main import (    "regexp"    "fmt")const str = "Some strings. Price: 100$. Some strings123"func main() {    re := regexp.MustCompile("Price:[[:space:]][0-9]+")    fmt.Println(re.FindAllString(str, -1))} 
查看完整描述

2 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

您可以在数字模式周围使用捕获组并调用re.FindStringSubmatch


package main 


import (

    "regexp"

    "fmt"

)


const str = "Some strings. Price: 100$. Some strings123"


func main() {

    re := regexp.MustCompile(`Price:\s*(\d+)`)

    match := re.FindStringSubmatch(str)

    if match != nil {

        fmt.Println(match[1])

    } else {

        fmt.Println("No match!")

    }

请注意,这`Price:\s*(\d+)`是一个原始字符串文字,您不必额外转义形成正则表达式转义的反斜杠,因此\s*匹配零个或多个空格并(\d+)匹配并将 1+ 位数字捕获到此模式字符串文字中的第 1 组中。


查看完整回答
反对 回复 2023-03-21
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

尝试使用下一个正则表达式:

re := regexp.MustCompile(`Price:[[:space:]]([0-9]+)`)
matches := re.FindStringSubmatch(str)

唯一的区别 - 是括号[0-9],现在您可以通过以下方式访问 100 matches[1]:。

您也可以替换:
[[:space:]]with \s
[0-9]with\d
这样您的正则表达式看起来会更简单,例如:Price:\s(\d+)


查看完整回答
反对 回复 2023-03-21
  • 2 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信