如何修改Ruby正则表达式以匹配两种不同格式的日志内容
适配两类日志格式的Ruby正则表达式修改方案
问题背景
现有两类日志格式:
- 格式1:
2022-09-23 18:40:45.846 I/getUsers: fetching data - 格式2:
11:54:54.619 INFO loadingUsers:23 - visualising: "Entered to dashboard
当前有一段仅适配格式1的Ruby正则表达式:
^([0-9-]+ [:0-9.]+)\s(?<level>\w+)[\/+](?<log>.*)
该正则对格式1的匹配结果:
level I
message getUsers: fetching data
需要修改正则,使其同时适配格式2,匹配结果需满足:
level INFO
message loadingUsers:23 - visualising: "Entered to dashboard
修改后的正则表达式
^([0-9-]+ [:0-9.]+|[:0-9.]+)\s(?<level>\w+)(?:\/|\s)(?<log>.*)
关键修改说明
- 时间格式兼容:将原时间匹配部分
([0-9-]+ [:0-9.]+)调整为([0-9-]+ [:0-9.]+|[:0-9.]+),同时支持带日期的完整时间(格式1)和仅时分秒的时间(格式2)。 - 分隔符兼容:把原分隔符匹配
[\/+]替换为(?:\/|\s),适配格式1中级别与日志内容间的/分隔,以及格式2中的空格分隔。(?:...)为非捕获组,避免生成无用的捕获结果。 - 保留命名捕获组:继续使用
<level>和<log>命名捕获组,确保输出结果完全符合需求。
匹配验证
- 对格式1,捕获结果为:
level: I,log: getUsers: fetching data - 对格式2,捕获结果为:
level: INFO,log: loadingUsers:23 - visualising: "Entered to dashboard
内容的提问来源于stack exchange,提问作者Zain
相关产品推荐
相关产品推荐

