[英]Regex to capture two groups from record
我正在研究一个 ETL 来处理机器生成的日志的解析。 这些日志类似于 csv 文件的扁平化 json 文件。 json 的有效负载(及其长度)取决于日志类型,例如错误、警报、...
每隔一段时间,日志文件中就会出现损坏的行。 这些损坏的行将两行合并为一行,并以特殊字符\x00
开头。 因此,可以识别这些损坏的行。 不过,我想检索这两行并将其与损坏的行分开。
数据示例(损坏的行是第 3 行):
日志文件 |
---|
2019.09.12 07:32:00,121,INIED |
2019.09.12 09:21:50,611,ALARM ,E,303,ARM 2 真空错误!! |
\x00 2019.09.12 10:04:46,611,ALARM ,O,501, 检查机 2019.09.12 10:06:22,611,ALARM ,E,303,ARM 2 VACUUM ERROR !! |
2019.09.12 10:52:38,209,简历 |
理想情况下损坏记录\x00 2019.09.12 10:04:46,611,ALARM ,O,501, Check machine 2019.09.12 10:06:22,611,ALARM ,E,303,ARM 2 VACUUM ERROR !!
将被检索为
2019.09.12 10:04:46,611,ALARM ,O,501, Check machine
2019.09.12 10:06:22,611,ALARM ,E,303,ARM 2 VACUUM ERROR !!
我从捕获组\d{4}.\d{2}.\d{2} \d{2}:\d{2}:\d{2}(.*)
开始获取所有内容时间戳。 这似乎是最简单的方法,因为我不能假设线的长度是固定的(由于扁平化的 json)。
问题:
所以这两者的组合将是:
(\d{4}.\d{2}.\d{2} \d{2}:\d{2}:\d{2}.*?)(?:$|(?=\d{4}.\d{2}.\d{2} \d{2}:\d{2}:\d{2}))
OR 子句是一个非捕获组,由“$”行的末尾和带有日期的“Positive Lookahead”组成。
您可以使用站点https://regexr.com/来测试和验证表达式,您应该尝试一下。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.