在没有小写字母和至少一个大写字母的情况下,我需要在go中找到一个匹配的正则表达式。
例如:
"1 2 3 A" : Match
"1 2 3" : No match
"a A " : no match
"AHKHGJHB" : Match
此功能有效,但在PHP中不可用(?=
令牌在Go中不可用):
(?=.*[A-Z].*)(?=^[^a-z]*$)
在我的代码中,此行称为regex:
isUppcase, _ := reg.MatchString(`^[^a-z]*$`, string)
实际上我的正则表达式在没有小写字母的情况下会捕获,但是我希望在至少有一个大写字母的情况下也能被捕获。
答案 0 :(得分:2)
您可以使用
^\P{Ll}*\p{Lu}\P{Ll}*$
或者,更有效率:
^\P{L}*\p{Lu}\P{Ll}*$
请参见regex demo。
详细信息
^
-字符串的开头^\P{L}*
-除字母以外的0个或更多字符\p{Lu}
-大写字母\P{Ll}*
-除小写字母外的0个或多个字符$
-字符串的结尾。package main
import (
"regexp"
"fmt"
)
func main() {
re := regexp.MustCompile(`^\P{L}*\p{Lu}\P{Ll}*$`)
fmt.Println(re.MatchString(`1 2 3 A`))
fmt.Println(re.MatchString(`1 2 3`))
fmt.Println(re.MatchString(`a A`))
fmt.Println(re.MatchString(`AHKHGJHB`))
fmt.Println(re.MatchString(`Δ != Γ`))
}
输出:
true
false
false
true
true