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

时间:2018-08-16 10:42:46

标签: regex go

我想找到一个整数,其后紧跟术语“ Price:”,无论是否在输出中,我只需要打印必须排除术语“ Price:”的整数。 现在,我的代码是这样的,输出是[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 个答案:

答案 0 :(得分:3)

您可以在数字模式周围使用一个捕获组并致电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+个数字。

答案 1 :(得分:1)

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

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

唯一的区别-括号[0-9]周围,现在您可以通过matches[1]访问100。

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