对于很多人来说,这可能是一个简单的问题,但对我来说仍然是一个难题(也许因为我是正则表达式的完全 n00b)。
我正在努力寻找一个正则表达式,它可能有助于发现大量日志信息文件中的错误。
基本上,我需要找到一个数字,总是以 Z 开头,后面紧跟 11 位数字。以 Z00000012345 为例。
这个数字用在多个句子中,举个例子:
Line 144: 07:16:36:933 | Important event received: number arrived: Z00000012345
Line 162: 07:16:42:314 | Processing and doing extremely important stuff...
Line 164: 07:16:42:374 | Almost ready with processing number Z00000012345
Line 165: 07:16:42:374 | Success with processing; number 'Z00000012345' has been processed.
我需要找到什么:
有时会发生已处理的数字(单引号之间的数字)与到达系统的数字(第一行)不同。
另一个棘手的事情是中间没有确切数量的固定句子。
我想将它分组设置,因为那样比较可能是最简单的,所以我开始:
(?<Found>(\barrived:\s)(\w+))
我的目标是先捕获“arrived:”后面的词,然后找到下一组匹配相同词但随后在单引号之间的词(如最后一行所示)。
但是,我怎样才能轻松做到这一点? 最终,我想将其引入 C# 工具。
顺便说一下,这些文件的大小高达 8 GB,因此我正在寻找速度。
期望的输出:
只要第一个数字(参见示例中的第 144 行)和第 165 行的最后一个数字之间没有匹配,所需的输出就是一个标志。如果这些是错误的,我有一个不匹配。由于这种情况非常罕见,我认为最好以这种方式进行搜索。
请您参考如下方法:
你可以试试这个:
arrived:\s*(Z\d{11})((?!arrived)[\s\S])*'((?:(?!\1)[^'])+)'
