正则表达式匹配一个单词,但前提是它之前或后面没有另一个特定单词



需要一个正则表达式字符串才能使用自定义 Exchange DLP"敏感信息"类型。

即与史密斯匹配,但如果约翰史密斯或史密斯约翰不匹配

(?i)(?<!Johns)Smith似乎为"约翰史密斯"工作,尽管我不相信它是100%有效的。

(?i)(Smith.*s(?!John))似乎适用于"史密斯约翰",但如果后面跟着空格或换行符,则不行。

尝试了以下方法将它们组合成一个字符串,但似乎根本不起作用。

(?i)(?<!Johns)Smith |(?i)(Smith.*s(?!John))

(?i)(?<!Johns)Smith.*s(?!John)

我犯了什么小学生的错误?

(?i)(?<!Johns)Smith |(?i)(Smith.*s(?!John))模式匹配前面没有John+ 1 空格Smith,或者匹配后跟任意数量的字符后跟不紧跟John空格的Smith。因此,它在很多位置上都与Smith相匹配。

(?i)(?<!Johns)Smith.*s(?!John)模式抓取一个前面没有立即带有John+ 空格的Smith,以及直到最后一个空格之前不紧跟John的所有文本。

确保s模式位于前瞻中:

(?i)(?<!Johns)Smith(?!s+John)

查看正则表达式演示

  • (?i)- 不区分大小写的内联修饰符
  • (?<!Johns)- 前面没有Hohn和空格字符的位置
  • Smith- 文本子字符串
  • (?!s+John)-Smith子字符串不应紧跟 1+ 空格(或者如果您使用s*,则为 0+ 空格(和子字符串John

相关内容

最新更新