提取所有匹配的子串的顺序,因为他们出现在原来的句子

2024-05-19 03:02:09 发布

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

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

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"],顺序与我的预期结果不同。我的错误很明显。你知道吗

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


Tags: andweb列表定义顺序关键字句子spider
2条回答

你可以建立一个列表(索引,关键字)和排序。然后从匹配的元组中提取关键字。你知道吗

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

result = [ k for i,k in sorted( (sentence.find(k),k) for k in keywords) if i != -1 ]

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

也可以使用正则表达式(从re模块中):

import re

result  = re.findall("|".join(keywords),sentence)

这是因为您是按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']

相关问题 更多 >

    热门问题