我有一个字符串,该字符串可能带有-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

10-08 03:28