在RegEx python 2.7中匹配单词边界

时间:2016-03-25 03:29:31

标签: regex nlp

我有以下代码可以从存在某个单词的文本中返回一行

with open('/Users/Statistical_NLP/Project/text.txt') as f:
    haystack = f.read()

with open('/Users/Statistical_NLP/Project/test.txt') as f:
    for line in f:
        needle = line.strip()
        pattern = '^.*{}.*$'.format(re.escape(needle))
        for match in re.finditer(pattern, haystack, re.MULTILINE):
            print match.group(0)

如何搜索单词并且不返回整行,只返回后面的3个单词和此单词前面的三个单词。

我的代码中必须更改此行中的内容:

pattern = '^.*{}.*$'.format(re.escape(needle))

非常感谢

1 个答案:

答案 0 :(得分:1)

以下正则表达式将帮助您实现您想要的目标。

((?:\w+\s+){3}YOUR_WORD_HERE(?:\s+\w+){3})

为了更好地理解正则表达式,我建议您转到下一页并进行实验。

https://regex101.com/r/eS8zW5/3

这将匹配之前的三个单词,匹配的单词和之后的三个单词。

如果它们存在,以下将匹配3个单词

((?:\w+\s+){0,3}YOUR_WORD_HERE(?:\s+\w+){0,3})