Python在字符串中的短语周围找到n大小的窗口

GNM*_*O11 4 python

例如'i cant sleep what should i do',我有一个字符串以及包含在字符串中的短语'cant sleep'。我想要完成的是在短语周围获得一个 n 大小的窗口,即使两边都没有 n 个单词。因此,在这种情况下,如果我的窗口大小为 2(短语的任一大小上都有 2 个单词),我会想要'i cant sleep what should'.

这是我当前尝试找到 2 的窗口大小的解决方案,但是当短语左侧或右侧的单词数小于 2 时失败,我也希望能够使用不同的窗口大小。

import re
sentence = 'i cant sleep what should i do'
phrase = 'cant sleep'
words = re.findall(r'\w+', sentence)
phrase_words = re.findall(r'\w+', phrase)
print sentence_words[left-2:right+3]

left = sentence_words.index(span_words[0]) 
right =  sentence_words.index(span_words[-1])
print sentence_words[left-2:right+3]
Run Code Online (Sandbox Code Playgroud)

daw*_*awg 8

您可以将分区方法用于非正则表达式解决方案:

>>> s='i cant sleep what should i do'
>>> p='cant sleep'
>>> lh, _, rh = s.partition(p)
Run Code Online (Sandbox Code Playgroud)

然后使用切片最多获得两个单词:

>>> n=2
>>> ' '.join(lh.split()[:n]), p, ' '.join(rh.split()[:n])
('i', 'cant sleep', 'what should')
Run Code Online (Sandbox Code Playgroud)

您的确切输出:

>>> ' '.join(lh.split()[:n]+[p]+rh.split()[:n])
'i cant sleep what should'
Run Code Online (Sandbox Code Playgroud)

你会要检查是否ps或者如果分区成功,当然。


正如评论中所指出的,lh最后的n话应该是否定的(感谢 Mathias Ettinger):

>>> s='w1 w2 w3 w4 w5 w6 w7 w8 w9'
>>> p='w4 w5'
>>> n=2
>>> ' '.join(lh.split()[-n:]+[p]+rh.split()[:n])
'w2 w3 w4 w5 w6 w7'
Run Code Online (Sandbox Code Playgroud)