如何编写正则表达式以从特定单词中提取前几个字符而没有或没有结束定界符?

时间:2018-07-20 21:59:33

标签: regex splunk

我有以下字符串,并且希望提取前几个字符,直到单词的末尾或“ Response”为止。

<ns2:GetJobStatus
<ns10:JobIDResponse
<ns2:JobStatusResponse
<ns3:GetJobId

我希望使用正则表达式,以便可以从上述所有行中提取GetJobStatus和GetJobID。我想从结果中删除“ Response”,这样在上面的示例中我将得到两个。这是splunk,所以我不能使用awk或sed或任何其他unix / linux命令。

这是我到目前为止所做的

<ns\d+:(?P<ws_name>.+?)(?:Response)

使用上述方法,我只能提取存在“响应”的地方

2 个答案:

答案 0 :(得分:1)

使用后向和向前看,您应该能够通过模式获得想要的结果

(?<=:)(\w+?)(?=Response|\b|$)

您将对捕获组(\w+?)感兴趣,因为捕获组将位于“:”字符之后,并位于“ Response”一词之前。 “ \ b | $”设置单词边界或行尾。

经过Regex101

测试

答案 1 :(得分:0)

您的开端很好。在ws_name组之后需要找到的单词是Response 一个word boundary。因此,您要做的就是在非捕获组中添加|\b

<ns\d+:(?P<ws_name>.+?)(?:Response|\b)

这里是demo

参考:

Alternation in Regular Expressions