首页 > 解决方案 > 以原始句子中出现的顺序提取所有匹配的子字符串

问题描述

我有一个存储定义关键字的列表,例如:

keywords = [
    "white shark",
    "tiger shark",
    "funnel web spider",
    "inland taipan"]

现在我造了一句话

str = "A tiger shark spotted here, and a white shark, and a funnel web spider"

从这句话中,我想产生一个结果["tiger shark", "white shark", "funnel web spider"]。关键字以它们在句子中的原始顺序出现在句子中。然后,我做了这样的代码

for i in keywords:
    if not str.find(i) == -1:
          result.append(i)

这会给我["white shark", "tiger shark", "funnel web spider"],订单与我的预期结果不同。我的错误很明显。

所以我的问题是如何获得正确的结果顺序。我认为唯一的方法是使用字符串来遍历关键字列表。但我认为这很复杂,因为它涉及许多组合。有什么帮助吗?太感谢了。

标签: python

解决方案


这是因为您按顺序添加它们keywords,而不是我们应该将它们的出现索引保存在中my_str,以便稍后根据它们在中出现的顺序排列我们的单词my_str

keywords = [
    "white shark",
    "tiger shark",
    "funnel web spider",
    "inland taipan"]
my_str = "A tiger shark spotted here, and a white shark, and a funnel web spider"

result = []
for keyword in keywords:
    idx = my_str.find(keyword)
    if idx != -1:
        result.append((idx, keyword))

result = [i[1] for i in sorted(result)]  # Sorts by first item in tuple, idx

print(result) # -> ['tiger shark', 'white shark', 'funnel web spider']

推荐阅读