至少有 2 个大写字母或 1 个数字的字母数字字母组合的正则表达式?

Regex for combination of alphnumeric letters which has at least 2 uppercase letter or 1 number?

我需要一个正则表达式来组合数字和大写字母,也许还有小写字母和 /,- 个字符,至少包含 4 个字符。

但当然至少要包含2个大写字母一个数字

我试过这个:

barcode_regex = r"(?=(?:.+[A-Z]))(?=(?:.+[0-9]))([a-zA-Z0-9/-]{4,})"

例如匹配如下情况:

ametFXUT0
G197-6STK
adipiscXWWFHH
A654/9023847
HYJ/54GFJ
hgdy67h

您可以通过交替使用两个前瞻组合来检查 2 个大写字母或 1 个数字:

^(?:(?=.*[A-Z].*[A-Z])|(?=.*\d))[A-Za-z0-9/-]+$

Demo

这个正则表达式模式表示:

^
(?:
    (?=.*[A-Z].*[A-Z])  assert that 2 or more uppercase are present
    |                   OR
    (?=.*\d)            assert that at least one digit is present
)
[A-Za-z0-9/-]+          match any alphanumeric content (plus forward slash or dash)
$

您可以使用单个前瞻断言至少 4 个字符,并匹配允许范围内的单个数字或 2 个大写字符。

^(?=.{4})(?:[A-Za-z/,-]*\d|(?:[a-z\d/,-]*[A-Z]){2})[A-Za-z\d/,-]*$

说明

  • ^ 字符串开头
  • (?=.{4}) 声明 4 个字符
  • (?:非捕获组
    • [A-Za-z/,-]*\d 匹配不带数字的可选允许字符,然后匹配数字
    • |
    • (?:[a-z\d/,-]*[A-Z]){2} 匹配 2 次不带大写字符的可选允许字符,然后匹配大写字符
  • )关闭非捕获组
  • [A-Za-z\d/,-]* 匹配可选的允许字符
  • $ 字符串结束

看到一个regex demo