新的Mercosul牌照正则表达式

Rod*_*pez 5 .net c# regex

新的Mercosul牌照有以下规则:

  • 必须有7个字母数字,其中:
    • 4是字母(AZ)
    • 3是数字(\ d)
  • 无论如何,字母和数字都可以洗牌.

因此以下文本有效:AB123CD,1A2B3CD,123ABCD,ABCD123

这些都是无效的:ABC1234D,ABCDE12,ABC123等

我知道我可以通过代码检查字符串大小和计算数字和字母来实现这一点,但这个问题让我想知道是否也可以通过Regex实现.

我能想到的就是产生所有可能性,如(\ d {3} [AZ] {4}),(\ d {2} [AZ] {4}\d)并使用| 加入他们,鉴于大量的组合,任何其他的想法,这是不实际的?或者这只是Regex不行的情况?

答案后编辑:

正如@stribizhev发布的那样,这是一个典型的未来用例.

我发现这个链接是一个非常有用的来源

而且这里有一个例子如何使用lookarounds进行密码验证

Wik*_*żew 9

您可以使用以下正则表达式进行验证:

^(?=(?:.*[0-9]){3})(?=(?:.*[A-Z]){4})[A-Z0-9]{7}$
Run Code Online (Sandbox Code Playgroud)

说明:

  • (?=(?:.*[0-9]){3}) - 正面预测以检查3位数
  • (?=(?:.*[A-Z]){4}) - 正面预测以检查4个字母
  • [A-Z0-9]{7}- 由7个字母数字符号组成的实际字符串(不包括图案的_一部分\w)

由于锚点(^$),应传递单个字符串以通过此测试.

您可以通过添加适当的选项来添加不区分大小写的匹配.

在Expresso中测试:

在此输入图像描述