正则表达式匹配银行帐号,不包括列出的白名单号

时间:2016-08-11 05:37:20

标签: regex exchange-server

我正在创建自定义Exchange DLP模板以匹配帐号。我创建了一个Regex就是这样做的,但我现在需要排除公司拥有的银行号码。

我使用的正则表达式是以下

(\ B \ d {2} [\ S - ]的 \ d {4} [\ S - ] \ d {7} [\ S - ] * \ d {2,3 } \ b)中

这将匹配以下任何一个

  • 01-1234-5678712-02
  • 01 1234 5678712 02
  • 011234567871202

使用尽可能多的,或少数空格或 - 在所需的数字组之间

现在,如果我想要排除

  • 01-1234-5678712-01
  • 02-4321-7856124-02
  • 03-1342-2451653-03

是否有办法在同一个正则表达式中执行此操作,并且知道此排除数字列表可能会在公司的整个生命周期中增长或缩小。

2 个答案:

答案 0 :(得分:0)

使用正则表达式捕获后过滤掉帐户可能会提高性能。但是,如果你仍想将它们从正则表达式中排除,你可以使用负面的环顾:

(?!01-1234-5678712-01|02-4321-7856124-02|03-1342-2451653-03)(\b\d{2}[\s-]*\d{4}[\s-]*\d{7}[\s-]*\d{2,3}\b)

(注意:我还为你的正则表达式添加了一些*以便实现"尽可能多的")

请注意,这比性能更慢且更难扩展,而不仅仅是根据已知的帐户列表检查您的正则表达式结果并丢弃那些存在的帐户。

负面预测

(?!{REGEX})

确保REGEX不能在当前点之前匹配。

答案 1 :(得分:0)

理论上,您可以在开头使用负前瞻表达式:

^(?!number1|number2|...)\d\d[\-\s]+\d{4}[\-\s]+\d{7}[\-\s]+\d\d$

如果需要,请确保匹配字符串的开头/结尾而不仅仅是边界。 (根据您的需要,边界检查可能没问题。)

但是,我不会将排除列表压缩到正则表达式中,因为这使得维护起来更加困难。你有可能为此创建第二个表达式吗?