正则表达式中匹配没有小写和至少一个大写?

时间:2019-06-27 11:10:29

标签: regex go regex-lookarounds

在没有小写字母和至少一个大写字母的情况下,我需要在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)

实际上我的正则表达式在没有小写字母的情况下会捕获,但是我希望在至少有一个大写字母的情况下也能被捕获。

1 个答案:

答案 0 :(得分:2)

您可以使用

^\P{Ll}*\p{Lu}\P{Ll}*$

或者,更有效率:

^\P{L}*\p{Lu}\P{Ll}*$

请参见regex demo

详细信息

  • ^-字符串的开头
  • ^\P{L}*-除字母以外的0个或更多字符
  • \p{Lu}-大写字母
  • \P{Ll}*-除小写字母外的0个或多个字符
  • $-字符串的结尾。

Go test

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