验证混合数据中的字符和数字

时间:2017-03-28 15:45:49

标签: c# regex

我创建了以下搜索模式:

1)搜索指定范围内的数字并排除特定数字(不包括1,2,8)

 string numberPattern = @"^([3-7|9 ]*)$";

2)搜索指定范围内的字母并排除特定字符(不包括B,V)

string characterPattern = @"^(?:(?![BV])[A-Z ])+$";


并且可以有三种输入:

  • 输入可以只是字符:ANRPIGHSAGASGG
  • 输入可以只是数字:34567934567967
  • 输入可以是字母和数字:9ANRPIG34HS56A


问题:

有没有办法告诉正则表达式,如果使用数字模式然后它忽略字符和字符模式相同,它会忽略数字?数据只能按混合顺序混合使用,除了在不同列表中对数字和字符进行分组然后使用相关模式之外,我不会看到其他方式。
有没有办法只用正则表达式来实现它?

2 个答案:

答案 0 :(得分:2)

我建议使用

^[3-79A-Z -[BV]]*$

请参阅regex demo

<强>详情:

  • ^ - 字符串锚的开头
  • [3-79A-Z -[BV]]* - 零个或多个(*)个字符:
    • 3-79A-Z - 从379,大写ASCII字母和空格的数字,除了 B和{ {1}} ASCII字母(V是字符类减法构造)
  • -[BV] - 字符串锚定结束。

答案 1 :(得分:2)

将其置于更易读的状态,以便您可以维护它。

^(?:[0-9A-Z](?<![128BV]))+$

解释

 ^                        # Beginning of string
 (?:                      # Cluster group
      [0-9A-Z]                 # Initially allow  0-9 or A-Z
      (?<! [128BV] )           # Qualify, not 1,2,8,B,V
 )+                       # End cluster, must be at least 1 character
 $                        # End of string