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"]
,订单与我的预期结果不同。我的错误很明显。
所以我的问题是如何获得正确的结果顺序。我认为唯一的方法是使用字符串来遍历关键字列表。但我认为这很复杂,因为它涉及许多组合。有什么帮助吗?太感谢了。
解决方案
这是因为您按顺序添加它们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']
推荐阅读
- python - 如何将不相等的列表压缩为第一个列表的产品?
- python - 如何从列表中选择元素并转到父级然后是兄弟级(通过 Xpath)
- node.js - 在 Socket.IO 中验证传入消息的好方法?
- nginx - Nginx [emerg] 这里不允许使用“server”指令
- hazelcast - Hazelcast Jcloud 发现不适用于 Azure
- python - 检查特定 div 中元素的可见性,Selenium Python
- php - Preg_split 2 个字符
- asp.net-mvc - 复杂类中列表项的Asp.net mvc自定义验证
- video - 如何在使用连接视频时指定比特率?
- java - 在 Jenkins 中获取过时版本的 Maven 项目资源