我试图提取${}
内的任何数据。
例如,从此字符串中提取的数据应为abc
。
git commit -m '${abc}'
以下是实际代码:
re := regexp.MustCompile("${*}")
match := re.FindStringSubmatch(command)
但这不起作用,任何想法?
答案 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")
}
答案 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])
}