【发布时间】:2019-08-20 17:49:23
【问题描述】:
我的高级副总裁希望我更新电子邮件系统上的正则表达式规则,以更好地检测美国银行帐号。问题是美国的银行帐号没有标准化,它们可以在 6 到 17 位之间。
我们目前使用限定词来检测我们已确定需要屏蔽的特定字符串。我们目前的规则是这样的变体:
(?i)bank\saccount\s[0-9]{6,17}
我需要解决的问题是需要检测数字,即使它们前面或后面带有bank account。我知道我可以找到一个这样的例子:
(?=.*?(bank\saccount))(?=.*?(\d{6,17}))
但我的 SVP 还希望能够检测特定消息中的帐号数量。我尝试使用贪婪量词添加第三个捕获组,以便它抓取与第二个不同的数字:
(?=.*?(bank\saccount))(?=.*?(\d{6,17}))(?=.*(\d{6,17}))
这是一个包含几个示例的沙盒: https://regex101.com/r/hqIEaR/3
我是正则表达式的新手,有没有办法设置此表达式以在字符串“银行帐户”存在的消息中返回等于 6-17 位数字实例的匹配数?
【问题讨论】:
-
如果正则表达式风格是 .NET,请使用
(?is)(?<=\bbank\saccount\b.*?)\b\d{6,17}\b|\b\d{6,17}\b(?=.*?\bbank\saccount\b),参见 demo。 -
不幸的是,我的电子邮件设备需要 PCRE 正则表达式。看起来该设备在后视镜中的量词存在问题。
-
你确定是PCRE吗?然后
(?is)(?:\G(?!\A)|\A(?=.*\bbank\saccount\b)).*?\K\b\d{6,17}\b必须工作。请参阅 此 ????????????????. -
@WiktorStribiżew,谢谢!这非常有效!
标签: regex pcre regex-group