2017-09-27 5 views
0

J'essaye de construire une regex pour une politique de prévention de perte de données dans laquelle nous devons faire correspondre les dates de naissance de forme longue tout en évitant une boîte envoyée renvoyée.RegEX correspond si la condition 1 existe mais la condition 2 ne fonctionne pas RegEX

C'est ce que j'ai jusqu'ici, mais ça ne fonctionne pas comme je l'avais espéré. Je suis relativement nouveau à regex. Veuillez excuser toute forme médiocre.

(?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

L'idée est que si Sent:' is not present AND (dob|date of birth|birth\s?date|birthday|born|d\.o\.b) est, alors regardez le format ci-dessus à moins de 500 caractères dudit jeu de mots.

par exemple: si un courriel est envoyé avec--

Date of Birth 

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

-I veulent que le regex correspond pas à la date après l'Sent:

Est-il même possible de faire correspondre une aide d'un double condition? Est-ce que j'essaie d'accomplir quelque chose pour lequel regex n'est pas destiné?

Toute aide est appréciée.

Merci!

+0

Je ne sais pas si vous pourriez le rendre un peu plus clair, mais je ne suis pas sûr de comprendre. Aussi, je considérerais cette regex à la place de celle que vous avez déjà: '(?! Sent:) \ b (dob | date \ s * de \ s * naissance | naissance \ s * date | anniversaire | née | d \ .o \ .b) \ b \ D {0,500} \ b (jan (?: uary)? | fév (?: ruaire)? | mar (?: ch)? | apr (?: il)? | may | juin? | juillet |? aug (?: ust)? | sep (?: tembre | t)? | oct (?: ober)? | nov (?: ember)? | dec (?: ember)?) \ b \ D {0,5} \ b (\ d {1,2}) \ D {0,20} (\ d {2,4}) \ b' – ctwheels

Répondre

0

J'ai poussé l'envoyé à après dob etc. de sorte que envoyé et la date sera ignorée quand ils se réunissent.

(?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 

Recherchez la démo regex here.

Le changement ne fait est le suivant:

(?:(?!Sent:)\D){0,500} - match 0 à 500 caractères non numériques seulement si elles ne sont pas suivies par sent:

Bien que le regex pourrait être un peu plus efficace, je seulement résolu votre problème de double condition pour le moment.

+0

@TannerDiercks supprimé l'info, désolé de négliger cela plus tôt! – kaza

+0

@TannerDiercks cela fonctionne pour vous? – kaza

+0

beaucoup mieux merci! – Spectre