我创建了以下搜索模式:
1)搜索指定范围内的数字并排除特定数字(不包括1,2,8)
string numberPattern = @"^([3-7|9 ]*)$";
2)搜索指定范围内的字母并排除特定字符(不包括B,V)
string characterPattern = @"^(?:(?![BV])[A-Z ])+$";
并且可以有三种输入:
ANRPIGHSAGASGG
34567934567967
9ANRPIG34HS56A
问题:
有没有办法告诉正则表达式,如果使用数字模式然后它忽略字符和字符模式相同,它会忽略数字?数据只能按混合顺序混合使用,除了在不同列表中对数字和字符进行分组然后使用相关模式之外,我不会看到其他方式。
有没有办法只用正则表达式来实现它?
答案 0 :(得分:2)
我建议使用
^[3-79A-Z -[BV]]*$
请参阅regex demo。
<强>详情:
^
- 字符串锚的开头[3-79A-Z -[BV]]*
- 零个或多个(*
)个字符:
3-79A-Z
- 从3
到7
,9
,大写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