对于很多人来说,这可能是一个简单的问题,但这对我来说仍然是一个难题(也许因为我对正则表达式而言是完整的n00b)。
我正在努力寻找一个正则表达式,该表达式可能有助于在大型日志信息文件中发现错误。
基本上,我需要找到一个数字,始终以Z开头,后面紧跟11位数字。以Z00000012345为例。
此数字用于多个句子,示例如下:
144行:07:16:36:933 |收到的重要事件:到达人数:
Z00000012345
162行:07:16:42:314 |处理和做得非常
重要的东西
线164:07:16:42:374 |几乎准备就绪,处理编号Z00000012345
165行:07:16:42:374 |处理成功;编号“ Z00000012345”已处理。
我需要找到什么:
有时会发生这样的情况:已处理的数字(单引号之间的数字)与到达系统的数字(第一行)不同。
另一个棘手的事情是,两者之间没有确切数量的固定句子。
我希望将其设置成组,因为那可能是最简单的比较,所以我开始:
(?<Found>(\barrived:\s)(\w+))
我的目标是首先捕获“到达”后面的单词,然后找到下一个与相同单词匹配的组,然后在单引号之间(如最后一行所示)。
但是,我如何轻松做到这一点?
最终,我想将其引入C#工具中。
顺便说一下,这些文件最多可以运行8 GB,因此是我寻找速度的方式。
所需的输出:
只要第一个数字(请参见示例中的第144行)与第165行的最后一个数字之间都不匹配,则所需的输出是一个标志。如果这些都不正确,则说明我不匹配。由于这种情况非常罕见,因此我认为最好以这种方式进行搜索。
最佳答案
您可以尝试以下方法:
arrived:\s*(Z\d{11})((?!arrived)[\s\S])*'((?:(?!\1)[^'])+)'
这是演示:
https://regex101.com/r/RAI4Zh/1