检查字符串是由3个大写字母和4个数字组成

时间:2017-07-19 02:42:46

标签: c# regex

我需要检查字符串是否由3个大写字母和4个数字组成。

例如:ABC1234

如何使用正则表达式检查它?

4 个答案:

答案 0 :(得分:4)

如果您正在寻找任何订单,以下是两种有趣的方法:

^(?=(.*\d){4})(?=(.*[A-Z]){3}).{7}$

"正好七个字符,包含4位数字和3个大写字母"。

^(?<d>){4}(?<c>){3}((?<-d>\d)|(?<-c>[A-Z])){7}$

&#34;期待4位数和3个大写字母;然后确保我们总共有7个数字或大写字母,在我们去的时候计算每个数字#34;。

答案 1 :(得分:2)

我想这样的事情会起作用:https://regex101.com/r/81ZTVQ/1

^[A-Z]{3}[0-9]{4}$

<强>解释

  • [A-Z] - 区分大小写的连续字符(大写字母A到大写字母Z)匹配谓词
  • {n} - 前一个匹配谓词的确切数字匹配
  • [0-9]数值范围(在本例中为0到9)匹配谓词

测试用例:

ABC1234 - Full match
A1BC234 - No match
GFQ9230 - Full match
ACB0000 - Full match

修改

我希望将我的添加内容与罗林的回答有些相似,但略有不同。

https://regex101.com/r/81ZTVQ/7

^(?=(.*[A-Z]){3})(?=(.*\d){4})([A-Z\d]{7})$

<强>解释

  • (?=(.*[A-Z]){3}) - 将A-Z与任何前面的字符匹配的正向前瞻,3次。
  • (?=(.*\d){4}) - 与任何前面的字符匹配0-9的正向前瞻,3次。
  • ([A-Z\d]{7}) - 提供的参数必须与此谓词匹配--A-Z和0-9的任意组合中的7。我只是喜欢把它放在一个组中,因此分组。

逻辑上向后工作,只要长度为7,我们就可以有AZ和0-9的任意组合。然后我们的正向前瞻断言要求的长度(在这种情况下,4位数,3个大写字母)。 / p>

用于编辑的测试用例

ABC1234
A1BC234
GFQ9230
ACB0000
AGF1923
A237323
3E44E4E
12344AB
AAAE123
AK348A3

答案 2 :(得分:1)

另一个正则表达式:^[A-Z]{3}\d{4}$

  • \d代表数字
  • ^在第一个char之前锚定
  • $在最后一个字符后锚定

答案 3 :(得分:0)

您可以检查字符串是否由3个大写字母和4个数字组成(假设大写字母和数字可以出现在字符串中的任何位置),如下所示:

    Regex rgx = new Regex(@"(^[A-Z]{3}\d{4}$)|(^[A-Z]{2}\d[A-Z]\d{3}$)|(^[A-Z]{2}\d{2}[A-Z]\d{2}$)|(^[A-Z]{2}\d{3}[A-Z]\d$)|(^[A-Z]{2}\d{4}[A-Z]$)|(^[A-Z]\d[A-Z]{2}\d{3}$)|(^[A-Z]\d[A-Z]\d[A-Z]\d{2}$)|(^[A-Z]\d[A-Z]\d{2}[A-Z]\d$)|(^[A-Z]\d[A-Z]\d{3}[A-Z]$)|(^[A-Z]\d{2}[A-Z]{2}\d{2}$)|(^[A-Z]\d{2}[A-Z]\d[A-Z]\d$)|(^[A-Z]\d{2}[A-Z]\d{2}[A-Z]$)|(^[A-Z]\d{3}[A-Z]{2}\d$)|(^[A-Z]\d{3}[A-Z]\d[A-Z]$)|(^[A-Z]\d{4}[A-Z]{2}$)|(^\d[A-Z]{3}\d{3}$)|(^\d[A-Z]{2}\d[A-Z]\d{2}$)|(^\d[A-Z]{2}\d{2}[A-Z]\d$)|(^\d[A-Z]{2}\d{3}[A-Z]$)|(^\d[A-Z]\d[A-Z]{2}\d{2}$)|(^\d[A-Z]\d[A-Z]\d[A-Z]\d$)|(^\d[A-Z]\d[A-Z]\d{2}[A-Z]$)|(^\d[A-Z]\d{2}[A-Z]{2}\d$)|(^\d[A-Z]\d{2}[A-Z]\d[A-Z]$)|(^\d[A-Z]\d{3}[A-Z]{2}$)|(^\d{2}[A-Z]{3}\d{2}$)|(^\d{2}[A-Z]{2}\d[A-Z]\d$)|(^\d{2}[A-Z]{2}\d{2}[A-Z]$)|(^\d{2}[A-Z]\d[A-Z]{2}\d$)|(^\d{2}[A-Z]\d[A-Z]\d[A-Z]$)|(^\d{2}[A-Z]\d{2}[A-Z]{2}$)|(^\d{3}[A-Z]{3}\d$)|(^\d{3}[A-Z]{2}\d[A-Z]$)|(^\d{3}[A-Z]\d[A-Z]{2}$)|(^\d{4}[A-Z]{3}$)");
    var samples = new string[]{ "ABC1234", "1A2B3C4", "ABCD123", "aBC1234", "ABC12345" };
    foreach(var sample in samples)
    {
        Console.WriteLine(sample + " is " + (rgx.IsMatch(sample) ? "a match" : "not a match"));
    }

输出:

  

ABC1234是一个比赛
  1A2B3C4是匹配
  ABCD123不匹配
  aBC1234不是匹配
  ABC12345不匹配

  • (...)代表一个群组
  • ^ 表示字符串的开头
  • [A-Z] 代表大写字母
  • [A-Z] {n} 代表 n 大写字母
  • \ d 代表一个数字
  • $ 表示字符串的结尾
  • | 用于表示可以接受右侧或左侧的任何内容