如何在KQL中提取Sentinel日志指定字符间的邮箱地址?
解决KQL中从additionalextensions列提取邮箱地址的问题
问题原因
KQL采用的RE2正则引擎不支持后向断言(lookbehind),所以你之前使用的(?<=:).*(?=;s)这类依赖断言的正则无法生效。
可行实现方法
方法一:使用extract()函数(正则捕获组)
通过正则捕获组直接定位目标内容,无需依赖断言:
// 替换YourTable为实际表名 YourTable | extend EmailAddress = extract(@"account=O365:(.*?);s", 1, additionalextensions)
- 正则
account=O365:(.*?);s:精准匹配account=O365:开头、;s结尾的片段,(.*?)非贪婪捕获中间的邮箱内容 extract()的第二个参数1表示提取第一个捕获组的内容
方法二:使用split()函数(无正则,性能更优)
如果日志格式固定,直接通过字符串拆分更高效:
// 替换YourTable为实际表名 YourTable | extend EmailAddress = split(split(additionalextensions, "account=O365:")[1], ";s")[0]
- 第一步
split(additionalextensions, "account=O365:")[1]:拆分出account=O365:之后的所有内容 - 第二步
split(..., ";s")[0]:将上述内容拆分出;s之前的部分,即目标邮箱地址
验证结果
针对示例日志cat=EXFILTRATION;account=O365:email.address@test.org.uk;start=1659975196000;end=165997519600,两种方法均可提取出email.address@test.org.uk。
内容的提问来源于stack exchange,提问作者Con
相关产品推荐
相关产品推荐

