需要使用正则表达式字符串以使用自定义Exchange DLP“敏感信息”类型。
即在史密斯上进行比赛,但如果约翰·史密斯或史密斯·约翰则不参加
(?i)(?<!John\s)Smith
似乎适用于“约翰·史密斯”,尽管我不确定它的效率是100%。
(?i)(Smith.*\s(?!John))
似乎适用于“史密斯·约翰(Smith John)”,但如果后面加空格或换行则无效。
尝试了以下方法将它们组合为一个字符串,但似乎根本不起作用。
(?i)(?<!John\s)Smith |(?i)(Smith.*\s(?!John))
(?i)(?<!John\s)Smith.*\s(?!John)
我在做什么小学生错误?
答案 0 :(得分:2)
(?i)(?<!John\s)Smith |(?i)(Smith.*\s(?!John))
模式与之前没有Smith
+ 1空格的John
匹配,或者匹配Smith
,后跟任意数量的字符,后跟一个不能紧跟John
的空白。因此,它在很多位置上都与Smith
相匹配。
(?i)(?<!John\s)Smith.*\s(?!John)
模式捕获的Smith
不能紧跟John
+空格,所有文本直到最后一个空格都不能紧跟John
确保\s
模式在超前区域内:
(?i)(?<!John\s)Smith(?!\s+John)
请参见regex demo
详细信息
(?i)
-不区分大小写的内联修饰符(?<!John\s)
-位置不紧跟Hohn
和空格char Smith
-文字子字符串(?!\s+John)
-Smith
子字符串后不应紧跟1+个空格(或者如果使用\s*
,则0+个空格)和子字符串John
。