如何从两个列表中打印匹配的关键字

2024-04-19 11:14:26 发布

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

jd = "looking for Hadoop Developer Good knowledge of SAP Workflow and SAP HANA"    
tech=['hadoop developer','sap workflow','sap hana']    
string_split = jd.split()    
matched = set(jd) & set(tech)

output:
matched
Out[9]: set()

如何打印匹配的两个单词,如:

hadoop developer,sap hana,sap workflow

Tags: hadoopdeveloperforworkflowtechjdsplitsap
3条回答

也可以在此处使用re.findall

import re
print(re.findall("|".join(tech), jd.lower()))
#['hadoop developer', 'sap workflow', 'sap hana']

|字符是正则表达式语法中的OR运算符。我们用它来连接tech中的术语。然后findall将返回字符串中模式的所有匹配项。你知道吗

这在默认情况下是区分大小写的,但是如果不想使输入字符串小写,可以添加IGNORECASE标志。你知道吗

re.findall("|".join(tech), jd, flags=re.IGNORECASE)
#['Hadoop Developer', 'SAP Workflow', 'SAP HANA']

最好的方法取决于你的数据。如果你有一个tech列表,其中项目很少,那么@pault解决方案将适合你的需要(但是我建议在模式中添加单词边界以避免误报),但是如果你有很多项目,你可以使用集合。你知道吗

你必须建立一个所有两个单词序列的集合,然后从技术列表中找到它和集合之间的交集。你知道吗

为了在jd中找到两个单词的所有序列,我在lookahead断言中使用了一个capture组。由于lookahead不使用字符,因此该模式能够找到两个单词的所有重叠序列:查找用于hadoophadoop开发人员。。。开头的\b和第二个\w的贪婪量词确保匹配只包含整个单词而不是部分单词。你知道吗

import re

jd = "looking for Hadoop Developer Good knowledge of SAP Workflow and SAP HANA"    
tech=['hadoop developer','sap workflow','sap hana']

two_words = re.findall('\b(?=(\w+\W*\w+))', jd.lower())
print(','.join(list(set(two_words) ^ set(tech))))

demo

简单的列表理解就行了。关键是强制jd降低,否则它将无法正确匹配。你知道吗

[i for i in tech if i in jd.lower()]
['hadoop developer', 'sap workflow', 'sap hana']

相关问题 更多 >