Skip to main content
 首页 » 编程设计

c#之尝试借助正则表达式在多行中找到匹配项

2024年02月04日30freeliver54

对于很多人来说,这可能是一个简单的问题,但对我来说仍然是一个难题(也许因为我是正则表达式的完全 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)[^'])+)' 

这是演示: https://regex101.com/r/RAI4Zh/1