如果条件1存在但条件2不是RegEX,则RegEX匹配

时间:2017-09-27 15:12:15

标签: regex regex-lookarounds

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

这是我到目前为止所做的,但它并没有按照我希望的方式运作。我对正则表达式相对较新。请原谅任何不良形式。

(?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),然后在所述单词匹配的500个字符内寻找上述格式。

例如: 如果发送电子邮件时带有 -

Date of Birth 

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

- 我希望正则表达式与Sent:

之后的日期不匹配

是否可以匹配使用双重条件?我是否正在努力完成正则表达式不适合的事情?

感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

我把发送到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} - 仅当未跟sent:

时,才匹配0到500个非数字字符

虽然正则表达式可以提高效率,但我目前只解决了双重条件问题。