【发布时间】:2019-11-09 22:22:45
【问题描述】:
我有一个这样的字符串(用点分隔的 4 个单词)
Exactfoobar.foobar-_nocaps.foobar-_nocaps.foobar-_caps
我需要编写一个正则表达式来查找上述模式。
- 可能有 4 个或更多字段,用点分隔
- 第一个单词应该是
Exactfoobar. - 第 2 和第 3 个单词不能有大写,但可以有 -_
- 第 4 个单词等可以带 -_ 大写
我正在考虑使用组,但它在这里不起作用:
^Exactfoobar\.([a-z0-9][a-z0-9_\-.])+([a-z0-9][a-zA-Z0-9_\-.])+$
我应该如何考虑在另一个字符串之后匹配一个字符串。有可能吗?
在 golang 中尝试此操作,但似乎无法正确使用上述正则表达式
package main
import (
"fmt"
"regexp"
)
func main() {
var validID = regexp.MustCompile(`^ Exactfoobar\.([a-z0-9][a-z0-9_\-.])+([a-z0-9][a-z0-9_\-.])+$`)
fmt.Println(validID.MatchString("Exactfoobar.somestring.some_other-string.someStringwithCaps"))
}
结果:
false
谢谢
【问题讨论】:
-
为什么不在点字符上拆分然后丢弃第一个元素(因为它总是
Exactfoobar)?这样你就不需要正则表达式了,它应该更快、更易读。
标签: regex go regex-group regex-greedy