Python regex来提取字符串的一部分

2024-05-16 03:58:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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

a多个字符串

“Lorem ipsum悲哀地坐在阿梅特,献身于一位优秀的人才,他在劳动和工作中的时间安排。我是一个很小的人,我是一个普通人的实验室。这是一个令人愉快的节日,它是一个令人愉快的节日。除此之外,我们的工作不应受到惩罚。”

目标词:laboris

前面的单词:5

后面的单词

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

我想到了几种可能的模式,但都不管用。我想它也可以通过简单地从目标单词前后遍历字符串来完成。然而,regex肯定会让事情变得更简单。任何帮助都将不胜感激。在


Tags: 字符串文本目标结尾时间单词实验室ipsum
3条回答

你也可以用nltk来接近它,它是"concordance" method,灵感来自Calling NLTK's concordance - how to get text before/after a word that was used?

A concordance view shows us every occurrence of a given word, together with some context.

import nltk


def get_neighbors(input_text, word, before, after):
    text = nltk.Text(nltk.tokenize.word_tokenize(input_text))

    concordance_index = nltk.ConcordanceIndex(text.tokens)
    offset = next(offset for offset in concordance_index.offsets(word))

    return text.tokens[offset - before - 1: offset] + text.tokens[offset: offset + after + 1]

text = u"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 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."  
print(get_neighbors(text, 'laboris', 5, 2))

在目标单词之前打印5个单词/标记,在目标单词之后打印2个单词/标记:

^{pr2}$
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

如果要拆分单词,可以使用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']

相关问题 更多 >