Python:在包含关键字的字符串之间提取子列表

Python:在包含关键字的字符串之间提取子列表,python,string,list,substring,sublist,Python,String,List,Substring,Sublist,我有一个字符串列表,现在我想提取包含特定关键字的两个字符串之间的所有字符串(包括这两个字符串) 我想要达到的结果是: result = ['the sky is blue', 'it is raining outside', 'mic check'] 到目前为止,我自己还没弄明白。 也许可以使用两个循环,并对每个单词使用regex?,您必须检查每个句子中是否存在。因此,您将有2个循环 最简单的方法是使用示例列表中句子的位置(索引): 将numpy导入为np 示例列表=[“测试句子”,“天空是蓝

我有一个字符串列表,现在我想提取包含特定关键字的两个字符串之间的所有字符串(包括这两个字符串)

我想要达到的结果是:

result = ['the sky is blue', 'it is raining outside', 'mic check']
到目前为止,我自己还没弄明白。
也许可以使用两个循环,并对每个单词使用regex?

,您必须检查每个句子中是否存在。因此,您将有2个循环

最简单的方法是使用示例列表中句子的位置(索引):

将numpy导入为np
示例列表=[“测试句子”,“天空是蓝色的”,“外面在下雨”,“麦克风检查”,“假期”]
关键词=['sky','check']
索引=[]
对于关键字中的k:
对于示例列表中的句子:
如果句子中有k:
index.append(示例_list.index(句子))
结果=示例列表[np.min(索引):np.max(索引)+1]
打印(结果)
它将返回:

[“天是蓝的”,“外面在下雨”,“麦克风检查”]

您可以使用关键字找到字符串的索引,然后使用第一次和最后一次出现的索引对值列表进行切片

indices = [i for i, x in enumerate(example_list) if any(k in x for k in keywords)]
result = example_list[indices[0]:indices[-1] + 1]
# ['the sky is blue', 'it is raining outside', 'mic check']

这是一个有点长的解决方案,但这里有另一种方法

found=False
s=0
c=0
对于范围内的i(len(示例_列表)):
如果在示例_列表[i]中未找到关键字[0]:
找到=真
s=i
在示例_列表[i]中找到elif和关键字[1]:
c=i+1
out=示例_列表[s:c]

一种生成器解决方案,可处理任意字符串序列,而不仅仅是列表:

def included(seq, start_text, end_text):
    do_yield = False
    for text in seq:
        if not do_yield and start_text in text:
            do_yield = True
        if do_yield:
            yield text
            if end_text in text:
                break

当然,您可以将结果作为一个列表进行投票。

我想您错过了
的“外面正在下雨”
,如果我没有弄错的话,也应该包括在内@Vall0n!我误解了这个问题。我编辑以正确回答它。
def included(seq, start_text, end_text):
    do_yield = False
    for text in seq:
        if not do_yield and start_text in text:
            do_yield = True
        if do_yield:
            yield text
            if end_text in text:
                break