说我有以下两种类型的字符串输入:
1) "feat: this is a feature"
2) "feat[JIRA-xxxx]: this is Jira feature
字符串包含三部分,其中feat
是Type,JIRA-xxx
内的[]
是可选的Jira故事ID,其余部分在:
之后。
我想使用单个正则表达式来匹配这三个部分,如果不存在可选文件,则应该为nil。以下是我的代码:
var re *regexp.Regexp
re = regexp.MustCompile("^(\\w*)(\\[(.*)\\])?\\:\\s(.*)$")
input := "feat[JIRA-xxxx]: this is Jira feature"
res := re.FindAllStringSubmatch(input, -1)
fmt.Print("%q", res)
我的正则表达式有问题。因为Jira ID部分是可选的,所以我必须使用()?
,但是()
的另一含义是返回匹配值,因此对于我的代码,它返回四个匹配项:
`feat`, `[JIRA-xxx]`, JIRA-xxx`, `this is Jira feature`
如何修改表达式,以便仅获得预期的3个匹配项?
答案 0 :(得分:3)
使用?:
修饰符创建一个非捕获组:
re = regexp.MustCompile("^(\\w*)(?:\\[(.*)\\])?\\:\\s(.*)$")