如果条件 1 存在但条件 2 不存在,则正则表达式匹配正则表达式

RegEX match if condition 1 exists but condition 2 does not RegEX

我正在尝试为数据丢失预防策略构建一个正则表达式,在该策略中我们需要匹配长格式的出生日期,同时避免转发已发件箱。

这就是我目前所做的,但它没有按照我希望的方式工作。我对正则表达式比较陌生。请原谅任何糟糕的形式。

(?i)(?!Sent:)\b(dob|date of birth|birth\s?date|birthday|born|d\.o\.b)\b\D{0,500}\b(jan|january|feb|february|mar|march|apr|april|may|jun|june|jul|july|aug|august|sep|sept|september|oct|october|nov|november|dec|december)\b\D{0,5}\b(\d{1,2})\D{0,20}(\d{2,4})\b

想法是 IF Sent:' is not present AND (dob|date of birth|birth\s?date|birthday|born|d\.o\.b) 是,THEN 在所述单词匹配的 500 个字符内查找上述格式。

例如: 如果发送电子邮件 -

Date of Birth 

From: 
Sent: Tuesday, September 26, 2017 9:19 AM
To: ''
Subject: FW: Routing Number Test

--我希望正则表达式不匹配 Sent:

之后的日期

甚至可以使用双重条件来匹配 a 吗?我是否正在尝试完成正则表达式不适合的事情?

感谢任何帮助。

谢谢!

我把发件人推到了 dob 等之后,这样发件人和日期在一起时就会被忽略。

(?i)\b(dob|date of birth|birth\s?date|birthday|born|d.o.b)\b(?:(?!Sent:)\D){0,500}\b(jan|january|feb|february|mar|march|apr|april|may|jun|june|jul|july|aug|august|sep|sept|september|oct|october|nov|november|dec|december)\b\D{0,5}\b(\d{1,2})\D{0,20}(\d{2,4})\b

查找正则表达式演示 here

唯一的变化如下:

(?:(?!Sent:)\D){0,500} -- 匹配 0 到 500 个非数字字符,前提是它们后面没有跟 sent:

虽然正则表达式可以更高效一些,但我目前只解决了你的双重条件问题。