如何在Go中进行可选的regexp匹配
假设我有以下两种类型的字符串输入:如何在Go中进行可选的regexp匹配,regex,go,Regex,Go,假设我有以下两种类型的字符串输入: 1) "feat: this is a feature" 2) "feat[JIRA-xxxx]: this is Jira feature 字符串包含三个部分,其中feat是类型,JIRA xxx内部[]是可选的JIRA故事id,后面的其余部分:是主题 我想使用一个regexp来匹配这三个部分,如果不存在可选文件,则应该得到nil。以下是我的代码: var re *regexp.Regexp re = regexp.MustCompile("^(\\w*)
1) "feat: this is a feature"
2) "feat[JIRA-xxxx]: this is Jira feature
字符串包含三个部分,其中feat
是类型,JIRA xxx
内部[]
是可选的JIRA故事id,后面的其余部分:
是主题
我想使用一个regexp来匹配这三个部分,如果不存在可选文件,则应该得到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个匹配项?使用
?:
修改器创建非捕获组:
re = regexp.MustCompile("^(\\w*)(?:\\[(.*)\\])?\\:\\s(.*)$")
.太好了!这正是我要找的。