更新前的问题:
根据我的评论,我认为您使用了错误的方法。在我看来你可以简单地使用in:
words = ['cat', 'caterpillar', 'monkey', 'monk', 'doggy', 'doggo', 'dog']
if 'cat' in words:
print("yes")
else:
print("no")
返回:yes
words = ['cats', 'caterpillar', 'monkey', 'monk', 'doggy', 'doggo', 'dog']
if 'cat' in words:
print("yes")
else:
print("no")
返回:no
更新后的问题:
现在,如果您的示例数据并未真正反映您的需求,但您有兴趣在列表元素中查找子字符串,您可以尝试:
import re
words = ['MX_QW-765', 'RUC_PO-345', 'RUC_POLO-209']
srch = 'PO'
r = re.compile(fr'(?<=_){srch}(?=-)')
print(list(filter(r.findall, words)))
或者使用match:
import re
words = ['MX_QW-765', 'RUC_PO-345', 'RUC_POLO-209']
srch = 'PO'
r = re.compile(fr'^.*(?<=_){srch}(?=-).*$')
print(list(filter(r.match, words)))
这将返回遵循该模式的项目列表(在本例中为 ['RUC_PO-345'])。我使用上述常规模式来确保您的搜索值不会位于搜索字符串的开头,而是在下划线之后,然后是 -。
现在,如果您有想要查找的产品列表,请考虑以下内容:
import re
words = ['MX_QW-765', 'RUC_PO-345', 'RUC_POLO-209']
srch = ['PO', 'QW']
r = re.compile(fr'(?<=_)({"|".join(srch)})(?=-)')
print(list(filter(r.findall, words)))
或者再次使用match:
import re
words = ['MX_QW-765', 'RUC_PO-345', 'RUC_POLO-209']
srch = ['PO', 'QW']
r = re.compile(fr'^.*(?<=_)({"|".join(srch)})(?=-).*$')
print(list(filter(r.match, words)))
两者都会返回:['MX_QW-765', 'RUC_PO-345']
请注意,如果您不支持 f 字符串,您也可以将变量连接到模式中。