我有一个字符串,该字符串可能带有-name,后跟值(可以有空格),并且在该值之后也可能有-descr,后跟一个值(后跟-descr的值可能也可能不存在):
字符串示例:
runcmd -name abcd xyz -descr abc def
要么
runcmd -name abcd xyz
使用Go语言,我如何编写regexp,如果存在-descr,它将返回给我字符串。因此,对于以上两个示例,结果应为:
runcmd -name abcd xyz
我正在尝试:
regexp.MustCompile(`(-name ).+?=-descr`)
但是,那没有返回任何匹配。我想知道正确的正则表达式来获取直到-descr的字符串(如果存在)
最佳答案
您可以在组中用-name
捕获第一部分,然后匹配两者之间的内容,并使用可选的第二个捕获组来匹配-descr
及其后面的内容。
然后,您可以在创建所需结果时使用捕获组。
^(.*? -name\b).*?(-descr\b.*)?$
Regex demo | Go demo
例如:
s := "runcmd -name abcd xyz -descr abc def"
re1 := regexp.MustCompile(`^(.*? -name\b).*?(-descr\b.*)?$`)
result := re1.FindStringSubmatch(s)
fmt.Printf(result[1] + "..." + result[2])
结果:
runcmd -name...-descr abc def