在 Python 中使用 Regex 过滤日志文件?

问题描述 投票:0回答:0

我需要在一场比赛和 4 组中过滤 NE、RESULT、REASON。这里的 REASON 将在 RESULT 值为“NOK”时出现

示例日志:


[(DU_21040162,NOK,unknown-element test test,<bad-element>gnbdu:gnb-du-cac-info2</bad-element>this is test string <bad-resource>gnbdu</bad-resource>),(DU_21040163,OK,'','',''),(DU_21040164,NOK,unknown-element test test,<bad-element>gnbdu:gnb-du-cac-info2</bad-element>this is test string <bad-resource>gnbdu</bad-resource>),,(DU_21040165,OK,'','','')]


[2023-04-06 16:28:33] NE=DU_21040162  , USER=xyz@abc , USER_IP=10.10.10.100 , OPERATION=edit-config ,RESULT=NOK, REASON=<rpc-error>unknown-element test test
RPC
<nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
  <nc:edit-config>
    <nc:target>
      <nc:running />
    </nc:target>
    <nc:default-operation>none</nc:default-operation>
    <nc:config>
      <gnbdu:managed-element xmlns:gnbdu="http://example.com/">
      test string
      </gnbdu:managed-element>
    </nc:config>
  </nc:edit-config>
</nc:rpc>
RPC-REPLY=
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" nc:message-id="1680778713062_system_127.0.0.1">
  <rpc-error>    
    <error-path xmlns:gnbdu="http://example.com/">/rpc/edit-config/config/gnbdu:managed-element/gnbdu:gnb-du-function</error-path>
    <error-info>
      <bad-element>gnbdu:gnb-du-cac-info2</bad-element>
      this is test string
      <bad-resource>gnbdu</bad-resource>
    </error-info>
  </rpc-error>
</rpc-reply>
;
[2023-04-12 14:04:04] NE=DU_21040162 , USER=xyz@abc , USER_IP=10.10.10.100 , OPERATION=edit-config , RESULT=OK
RPC=
<nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
  <nc:edit-config>
    <nc:target>
      <nc:running />
    </nc:target>
    <nc:default-operation>none</nc:default-operation>
    <nc:config>
      <gnbdu:managed-element xmlns:gnbdu="http://example.com/">
      test string
      </gnbdu:managed-element>
    </nc:config>
  </nc:edit-config>
</nc:rpc>
RPC-REPLY=
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" nc:message-id="1681288444979_system_127.0.0.1">
  <ok/>
</rpc-reply>
;
[2023-04-06 16:28:33] NE=DU_21040164, USER=xyz@abc , USER_IP=10.10.10.100 , OPERATION=edit-config ,RESULT=NOK, REASON=<rpc-error>unknown-element test test
RPC
<nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
  <nc:edit-config>
    <nc:target>
      <nc:running />
    </nc:target>
    <nc:default-operation>none</nc:default-operation>
    <nc:config>
      <gnbdu:managed-element xmlns:gnbdu="http://example.com/">
      test string
      </gnbdu:managed-element>
    </nc:config>
  </nc:edit-config>
</nc:rpc>
RPC-REPLY=
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" nc:message-id="1680778713062_system_127.0.0.1">
  <rpc-error>    
    <error-path xmlns:gnbdu="http://example.com/">/rpc/edit-config/config/gnbdu:managed-element/gnbdu:gnb-du-function</error-path>
    <error-info>
      <bad-element>gnbdu:gnb-du-cac-info2</bad-element>
      this is test string
      <bad-resource>gnbdu</bad-resource>
    </error-info>
  </rpc-error>
</rpc-reply>
;
[2023-04-12 14:04:04] NE=DU_21030163 , USER=xyz@abc , USER_IP=10.10.10.100 , OPERATION=edit-config , RESULT=OK
RPC=
<nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
  <nc:edit-config>
    <nc:target>
      <nc:running />
    </nc:target>
    <nc:default-operation>none</nc:default-operation>
    <nc:config>
      <gnbdu:managed-element xmlns:gnbdu="http://example.com/">
      test string
      </gnbdu:managed-element>
    </nc:config>
  </nc:edit-config>
</nc:rpc>
RPC-REPLY=
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" nc:message-id="1681288444979_system_127.0.0.1">
  <ok/>
</rpc-reply>
;

我尝试使用下面的正则表达式。

NE=([\S]+)|结果=([\w]{1,4})|(原因=[\S\s].)|([\s\S]?)。 *?

NE=([\S]+).RESULT=([\w]+)(?:.REASON=([\S\s].))?|([\s\S]? )

NE=([\S]+).RESULT=([\w]+)(?:.REASON=([\S\s].))?[\s\S]([\ s\S]*?)|NE=([\S]+).*RESULT=([\w]+)(?:.REASON=([\S\s].))?

问题的预期输出:

[(DU_21040162,NOK,unknown-element test test,gnbdu:gnb-du-cac-info2this is test string gnbdu),(DU_21040163,OK,'','',''),(DU_21040164,NOK,unknown- element test test,gnbdu:gnb-du-cac-info2这是测试字符串gnbdu),,(DU_21040165,OK,'','','')]

python regex regex-group regex-lookarounds
© www.soinside.com 2019 - 2024. All rights reserved.