匹配包含特定单词的行的第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