匹配包含特定单词的行的第N个单词

我正在试图获得正确的REGEX来完成这项任务:

匹配包含特定单词的行的第N个单词

例如:

输入:

this is the first line - blue
this is the second line - green
this is the third line - red

我想匹配包含单词« second »的行的第7个单词

期望的输出:

green

有谁知道如何做到这一点?

我正在使用http://rubular.com/来测试REGEX。

我已经尝试过这个REGEX 没有成功 - 它匹配下一行

(.*second.*)(?<data>.*?s){7}(.*)

- - 更新 - -

例2

输入:

this is the Foo line - blue
this is the Bar line - green
this is the Test line - red

我想匹配包含单词« red »的行的第4个单词

期望的输出:

Test

换句话说 - 我想匹配的单词可以在我用来选择线条的单词之前或之后出现


你可以用它来匹配包含second个单词的行,并抓住第7个单词:

^(?=.*bsecondb)(?:S+ ){6}(S+)

确保全局和多行标志处于活动状态。

^匹配一行的开头。

(?=.*bsecondb)是一个肯定的前瞻,以确保在该特定行中有second单词。

(?:S+ ){6}匹配6个单词。

(S+)将获得第七名。

regex101演示


您可以将其他要求应用于相同的原则。

用一行包含red并获得第四个单词...

^(?=.*bredb)(?:S+ ){3}(S+)

你要求正则表达式,并且你有一个很好的答案。

有时您需要寻求解决方案,而不是指定工具。

以下是我认为最适合您需求的一行:

awk '/second/ {print $7}' < inputFile.txt

说明:

/second/     - for any line that matches this regex (in this case, literal 'second')
print $7     - print the 7th field (by default, fields are separated by space)

我认为它比正则表达式更容易理解 - 并且对于这种处理更加灵活。

链接地址: http://www.djcxy.com/p/2159.html

上一篇: match the Nth word of a line containing a specific word

下一篇: Regular expression for line match without specific word