记一次复杂的正则匹配——匹配但不包含
原始的日志信息如下:
RunspaceId : d3dbe55b-b0c2-48ef-8f49-0f30ebd553aa ObjectModified : test CmdletName : New-Mailbox CmdletParameters : {ResetPasswordOnNextLogon, Alias, Password, UserPrincipalName, Database, SamAccountName, LastName, Organizat ionalUnit, Initials, FirstName, Name} ModifiedProperties : {} Caller : TEst.Admin Succeeded : True Error : RunDate : 2014/3/24 10:01:49 OriginatingServer : TEST(15.00.0775.022) Identity : RgAAAABRB0jEnPi7SZ46Wv3WKUahBwAfCsv7xh/zT66wYhIbLojWAAAAb1GrAABdb7eQEuSqQ5aHAWignShgAAAAACmAAAAJ IsValid : True
现需要将以上文本以:为分隔提取后面的值信息,因为开发的通用日志解析工具是通过正则来提取数据的,这样就需要把这个数据块中特征通过正则表示出来,然后提取特征之后的数据,研究了大半天后来终于给写出来了,好费劲,正则不熟啊,记录一下:
(?:RunspaceId : )(?<RunspaceId>[\s\S]*) (?:ObjectModified : )(?<ObjectModified>[\s\S]*) (?:CmdletName : )(?<CmdletName>[\s\S]*) (?:CmdletParameters : )(?<CmdletParameters>[\s\S]*) (?:ModifiedProperties : )(?<ModifiedProperties>[\s\S]*) (?:Caller : )(?<Caller>[\s\S]*) (?:Succeeded : )(?<Succeeded>[\s\S]*) (?:Error : )(?<Error>[\s\S]*) (?:RunDate : )(?<RunDate>[\s\S]*) (?:OriginatingServer : )(?<OriginatingServer>[\s\S]*) (?:Identity : )(?<Identity>[\s\S]*) (?:IsValid : )(?<IsValid>.*)
最终通过正则的组名去获取匹配上的信息就可以了。
(?:pattern) |
匹配 pattern 但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储供以后使用的匹配。这对于用“or”字符 (|) 组合模式部件的情况很有用。例如,'industr(?:y|ies) 是比 'industry|industries' 更经济的表达式。 |
据说看到好文章不推荐的人,服务器容易宕机!
本文版权归翟士丹(Stan Zhai)和博客园共有,原创文章,未经允许不得转载,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构