首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用正则表达式查找紧跟在字符后面的单词

使用正则表达式查找紧跟在字符后面的单词
EN

Stack Overflow用户
提问于 2020-03-16 03:40:48
回答 4查看 59关注 0票数 1

我正在尝试查找以下行中紧跟在'%‘后面的单词:

代码语言:javascript
复制
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代码,它正在运行。

代码语言:javascript
复制
result = re.search(r"\%.* \: ", txt)
result.group()

here是结果:

但是,我的reg ex在下面这样的代码行中失败:

代码语言:javascript
复制
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.
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-03-16 03:46:27

正则表达式中的重复(*+)默认为“贪婪”模式:它们尝试匹配最长的文本。在您提供的失败案例中,消息中要匹配的单词后面还有额外的冒号(:),因此贪婪的星号*将它们全部匹配。

您可以将行为更改为“惰性”(或“非贪婪”),方法是在重复之后添加问号(?),将其更改为:

代码语言:javascript
复制
result = re.search(r"\%.*? \: ", txt)

查看结果here。有关更多信息,请考虑阅读this article

票数 2
EN

Stack Overflow用户

发布于 2020-03-16 03:47:52

您需要的是一个百分号后跟一个或多个非空格:

代码语言:javascript
复制
re.search("%\S+", s)
#<_sre.SRE_Match object; span=(52, 84), match='%FABRIC-NPU_DRVR-1-PACIFIC_ERROR'>
票数 1
EN

Stack Overflow用户

发布于 2020-03-16 03:49:10

您可以使用:

代码语言:javascript
复制
re.search(r'%([^\s]+)', s).group(1)

输出(针对regex失败的行进行测试):

代码语言:javascript
复制
FABRIC-NPU_DRVR-1-PACIFIC_ERROR

或者您可以使用:

代码语言:javascript
复制
 re.search(r'%(\S+)', s).group(1) # \S is the same with [^\s]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60696888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档