регулярное выражение в го, которые совпадают без строчных и хотя бы с одной прописной? - PullRequest
0 голосов
/ 27 июня 2019

Мне нужно найти регулярное выражение в го, которое соответствует, когда нет строчных и хотя бы одного прописного.

Например:

"1 2 3 A"  : Match
"1 2 3"    : No match
"a A "     : no match
"AHKHGJHB" : Match

Это работает, но в PHP не в Go (токен ?= не работает в Go):

(?=.*[A-Z].*)(?=^[^a-z]*$)

В моем коде эта строка вызывает регулярное выражение:

isUppcase, _ := reg.MatchString(`^[^a-z]*$`, string)

На самом деле мой regex ловит, когда нет строчных букв, но я хочу, чтобы он также ловил, когда есть хотя бы один прописные буквы.

1 Ответ

2 голосов
/ 27 июня 2019

Вы можете использовать

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

Или, более эффективный:

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

См. Демоверсию regex .

информация

  • ^ - начало строки
  • ^\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
...