Golang:使用Regex提取数据

时间:2016-05-19 07:37:37

标签: regex string algorithm go

我试图提取${}内的任何数据。

例如,从此字符串中提取的数据应为abc

git commit -m '${abc}'

以下是实际代码:

re := regexp.MustCompile("${*}")
match := re.FindStringSubmatch(command)

但这不起作用,任何想法?

5 个答案:

答案 0 :(得分:21)

您需要在正则表达式中转义${}

re := regexp.MustCompile("\\$\\{(.*?)\\}")
match := re.FindStringSubmatch("git commit -m '${abc}'")
fmt.Println(match[1])

<强> Golang Demo

在正则表达式中,

$ <-- End of string
{} <-- Contains the range. e.g. a{1,2}

您也可以使用

re := regexp.MustCompile(`\$\{([^}]*)\}`)

答案 1 :(得分:2)

尝试重新:= regexp.MustCompile(\$\{(.*)\}) *是量词,你需要量化的东西。 .会匹配所有内容。

答案 2 :(得分:1)

由于{}*在正则表达式中都具有特殊含义,因此需要对其进行反对以匹配这些文字字符,因为re := regexp.MustCompile(`\$\{.+?)\}`) 没有以这种方式工作,并且因为您实际上没有为要捕获的数据包含捕获组。尝试:

// Set the footers
table.setFooterVisible(true);
table.setColumnFooter("Name", "Average");
table.setColumnFooter("Died At Age", String.valueOf(avgAge));

答案 3 :(得分:1)

对于另一种方法,您可以使用 os.Expand:

package main
import "os"

func main() {
   command := "git commit -m '${abc}'"
   var match string
   os.Expand(command, func(s string) string {
      match = s
      return ""
   })
   println(match == "abc")
}

https://golang.org/pkg/os#Expand

答案 4 :(得分:0)

您也可以尝试一下,

re := regexp.MustCompile("\\$\\{(.*?)\\}")

str := "git commit -m '${abc}'"
res := re.FindAllStringSubmatch(str, 1)
for i := range res {
    //like Java: match.group(1)
    fmt.Println("Message :", res[i][1])
}

GoPlay:https://play.golang.org/p/PFH2oDzNIEi