Python正则表达式提取一部分字符串

use*_*623 8 python regex python-2.7

我想提取一个大字符串的一部分.在之前和之后的单词数量上有一个目标单词和一个上限.因此,提取的子字符串必须包含目标字以及它之前和之后的上限字.如果目标单词更接近文本的开头或结尾,则前后部分可以包含较少的单词.

Eample字符串

"Lorem ipsum dolor sit amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.Ut enim ad minim veniam,quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.Duis aute irure dolor in rephenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.Excepteur sint occaecat cupidatat non proident,sunt in culpa qui officia deserunt mollit anim id est laborum."

目标词: 劳动力

words_before: 5

words_after: 2

应该回来 ['veniam, quis nostrud exercitation ullamco laboris nisi ut']

我想到了几种可能的模式,但没有一种有效.我想也可以通过简单地从目标单词前后遍历字符串来完成.然而,正则表达式肯定会让事情变得更容易.任何帮助,将不胜感激.

Kev*_*uan 5

如果要分割单词,可以使用slice()split() 功能.例如:

>>> text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
 tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, qu
is nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
 Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
 fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in 
culpa qui officia deserunt mollit anim id est laborum.".split()

>>> n = text.index('laboris')
>>> s = slice(n - 5, n + 3)

>>> text[s]
['veniam,', 'quis', 'nostrud', 'exercitation', 'ullamco', 'laboris', 'nisi', 'ut']
Run Code Online (Sandbox Code Playgroud)


Let*_*lle 3

If you still want regex....

def find_context(word_, n_before, n_after, string_):
    import re

    b= '\w+\W+'  * n_before
    a=  '\W+\w+' * n_after
    pattern = '(' + b + word_ + a + ')'

    print(re.search(pattern, string_).groups(1)[0])


find_context('laboris', 5, 2, st)

veniam, quis nostrud exercitation ullamco laboris nisi ut

find_context('culpa', 2, 2, st)

sunt in culpa qui officia
Run Code Online (Sandbox Code Playgroud)