我正在寻找以下行中'%'之后的单词:
RP/0/RP0/CPU0:Feb 26 20:04:01.869 UTC: esd[361]: %PKT_INFRA-FM-3-FAULT_MAJOR : ALARM_MAJOR :SWITCH_LINK_ERR_E :DECLARE :0/RP0/CPU0/7:
LC/0/9/CPU0:Feb 26 20:00:25.560 UTC: npu_drvr[253]: %PLATFORM-OFA-6-INFO : NPU #1 Initialization Completed
首先,我使用了以下Python代码,它正在运行。
result = re.search(r"\%.* \: ", txt)
result.group()
[here是结果:
但是,我的正则表达式在这样的行中失败:
LC/0/9/CPU0:Feb 27 15:33:58.509 UTC: npu_drvr[253]: %FABRIC-NPU_DRVR-1-PACIFIC_ERROR : [5821] : [PACIFIC A0]: For asic 0 : A0 Errata: Observed RX CODE errors on link 120 , This is expected if you have A0 asic versions in the system and do triggers like OIR, reload etc.
正则表达式中的重复(*
和+
)默认为“贪婪”模式:它们尝试匹配最长的文本。在您提供的失败案例中,单词要匹配的消息中还有其他冒号(:
),因此贪婪的星星*
都将其匹配。
您可以在重复之后添加问号(?
),将其更改为:,将行为更改为“懒惰”(或“非贪婪”),]
result = re.search(r"\%.*? \: ", txt)
检查结果here。有关更多信息,请考虑阅读this article。
您想要的是一个百分号,后接一个或多个非空格:
您可以使用:
尝试: