我目前正在尝试创建一个regex,它能够解析以下几行日志:
[210616|13:46:32.738|00017] --> CONFD_OK
[210616|13:46:32.738|00017] TRACE CDB_EXISTS /managed-element/fault-management/active-alarm/active-alarm-entries{oru oran-vendor-specific-alarm ORU[1]-ORU[1]/carrier0/antenna34/1004}[210616|13:46:32.738|00017] --> CONFD_OK
[210616|13:46:32.738|00017] TRACE CDB_END_SESSION [210616|13:46:32.738|00017] --> CONFD_OK
[210616|13:46:38.361|00270] TRACE Established new CDB session to ConfD在这种情况下,通过解析,它将选择初始时间,然后是描述。
比赛:
[210616|13:46:32.738|00017] --> CONFD_OK
[210616|13:46:32.738|00017] TRACE CDB_EXISTS /managed-element/fault-management/active-alarm/active-alarm-entries{oru oran-vendor-specific-alarm ORU[1]-ORU[1]/carrier0/antenna34/1004}
[210616|13:46:32.738|00017] --> CONFD_OK
[210616|13:46:32.738|00017] TRACE CDB_END_SESSION [210616|13:46:32.738|00017] --> CONFD_OK
[210616|13:46:38.361|00270] TRACE Established new CDB session to ConfD我刚开始的时候 \[[^\[\|]*\|[^\]]*\].*来选择初始部分,但我在克服日志中的多样性时遇到了一些困难:
为了解决这些问题,我试着实现一个非贪婪的per,然后是正面的展望,但现在我只能选择第一个项目,并且只有在连续两个项目的情况下才能选择。
\[[^\[\|]*\|[^\]]*\](.*?)(?=\[[^\[\|]*\|[^\]]*\])我认为,理想情况下,这将是我的最初顺序,然后是一个非贪婪的搜索,然后是正面的展望,在我的初始状态或结束线。
在上下文中,我正在为角元件中的角电子应用程序做这方面的工作。
如有任何建议,将不胜感激。
发布于 2021-06-30 17:13:01
在此模式中,\[[^\[\|]*\|[^\]]*\].*末尾的.*将与行的其余部分匹配。
在这种模式中,\[[^\[\|]*\|[^\]]*\](.*?)(?=\[[^\[\|]*\|[^\]]*\])将日志的开头与方括号相匹配,然后尽可能地捕获字符,直到末尾的正前瞻性断言为真为止。
如果断言不为真,则.*?非贪婪部分就足以匹配0字符。
您可以做的是添加一个替换|,它尽可能地与字符匹配,直到遇到另一个日志启动或字符串结束为止。
\[[^\[\|]*\|[^\]]*\](.*?)(?=\[[^\[\|]*\|[^\]]*\]|$)如果您想要这两个不同的部分,您也可以使用两个捕获组。
(\[[^\[\|]*\|[^\]]*\])\s*(.*?)(?=\[[^\[\|]*\|[^\]]*\]|$)发布于 2021-06-30 17:25:41
与其尝试编写一个正则表达式来统治它们,我更倾向于一种更简单的方法--字符串拆分。
首先,在开始新日志条目的模式上拆分(/(?=\[\d+\|)/工作得很好),然后在]上分割行的其余部分,在|再分割一次。
var fileContents = `[210616|13:46:32.738|00017] --> CONFD_OK
[210616|13:46:32.738|00017] TRACE CDB_EXISTS /managed-element/fault-management/active-alarm/active-alarm-entries{oru oran-vendor-specific-alarm ORU[1]-ORU[1]/carrier0/antenna34/1004}
[210616|13:46:32.738|00017] --> CONFD_OK
[210616|13:46:32.738|00017] TRACE CDB_END_SESSION [210616|13:46:32.738|00017] --> CONFD_OK
[210616|13:46:38.361|00270] TRACE Established new CDB session to ConfD`
var lines = fileContents.split(/(?=\[\d+\|)/).map(line => {
var pos = line.indexOf(']');
return line.slice(1, pos).split('|').concat(line.slice(pos + 1).trim());
});
console.log(lines);给出
[
["210616", "13:46:32.738", "00017", "--> CONFD_OK"],
["210616", "13:46:32.738", "00017", "TRACE CDB_EXISTS /managed-element/fault-management/active-alarm/active-alarm-entries{oru oran-vendor-specific-alarm ORU[1]-ORU[1]/carrier0/antenna34/1004}"],
["210616", "13:46:32.738", "00017", "--> CONFD_OK"],
["210616", "13:46:32.738", "00017", "TRACE CDB_END_SESSION"],
["210616", "13:46:32.738", "00017", "--> CONFD_OK"],
["210616", "13:46:38.361", "00270", "TRACE Established new CDB session to ConfD"]
]https://stackoverflow.com/questions/68198651
复制相似问题