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

Python 如何从两个列表中打印匹配的关键字,python,regex,string,list,Python,Regex,String,List,如何打印匹配的两个单词,如: 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()

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

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()

简单的列表理解将起作用。关键是强制
jd
降低,否则它将无法正确匹配

hadoop developer,sap hana,sap workflow

您也可以在此处使用
re.findall

[i for i in tech if i in jd.lower()]
['hadoop developer', 'sap workflow', 'sap hana']
|
字符是正则表达式语法中的OR运算符。我们使用它来加入
tech
中的术语。然后
findall
将返回字符串中模式的所有匹配项

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

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

最好的方法取决于您的数据。如果您的技术列表中只有很少的项目,那么@pault solution将适合您的需要(但是我建议在模式中添加单词边界以避免误报),但是如果您有很多项目,您可以使用集合

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

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

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

您是否了解您发布的代码在做什么?
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))))