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