REGEX:如何获得比赛周围最近的单词?

时间:2014-03-14 08:03:16

标签: regex

是否可以制作一个匹配的表达式,在这个单词之前和之后说'FINDTHISWORD'+最多5个单词?事情是,之前或之后可能只有0或1个单词,所以它应匹配0-5个单词+ FINDTHISWORD然后0-5个单词。

它应该匹配的例子:

fdoijfd iudfhiufdh fdhui FINDTHISWORD iduhdfd 
FINDTHISWORD iduhdfd oijfdfd 
doijd FINDTHISWORD

3 个答案:

答案 0 :(得分:14)

你可以使用量词:

(\w+ ){0,5}FINDTHISWORD( \w+){0,5}

答案 1 :(得分:0)

我会这样做:

((?:\p{Xwd}+\P{Xwd}){0,5})\bFINDTHISWORD\b((?:\P{Xwd}\p{Xwd}+){0,5})

其中

\p{Xwd}表示字符unicode兼容的任何单词 \P{Xwd}\p{Xwd}

的对立面

之前的单词将在第1组中,而在第2组之后的单词。

答案 2 :(得分:0)

可能不如长正则表达式和量词表那么优雅,但阅读和理解起来非常简单:

grep FINDTHIS file | while read X; do xargs -n1 <<<$X | grep -C5 FINDTHIS|xargs;done

基本上,它找到包含FINDTHIS的行,然后一次一个地读取它们到一个循环中。在循环中,行中的单词各自放在他们自己的行上,然后我只使用常规grep,上下文为5(-C5),在重新组合之前获取5个单词线。