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

Regex match bank account numbers, excluding a list of white listed numbers

我正在创建自定义 Exchange DLP 模板来匹配帐号。我创建了一个正则表达式来执行此操作,但我现在需要排除公司拥有的银行号码。

我使用的正则表达式公式如下

(\b\d{2}[\s-]\d{4}[\s-]\d{7}[\s-]* \d{2,3}\b)

这将匹配以下任何一项

数字组之间的空格或 - 的数量随心所欲

现在,如果我想排除

有没有办法在同一个正则表达式中做到这一点,并且知道这个排除号码列表可能会在公司的整个生命周期中增加或减少。

在使用正则表达式捕获后过滤掉帐户可能会提高性能。但是如果你仍然想从正则表达式中排除它们,你可以使用否定环视:

(?!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不能匹配到当前点之前。

理论上你可以在开始时使用否定的先行表达式:

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

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

但是,我不会将排除列表压缩到该正则表达式中,因为这会使它更难维护。您是否有机会为此创建第二个表达式?