Python如何检查字符串包含指定列表值且仅对特定关键词排除对应短语
问题原因
你原有逻辑存在两个核心错误:
- 未拆分两类匹配规则:
and/with/be in三个词的匹配不需要受排除短语限制,但你把它们和需要做排除校验的for放在同一组判断,导致排除逻辑错误影响了这三个词的匹配判断 - 排除校验逻辑用错了聚合函数:你用
any(word not in stringVar for word in exc_list),只要任意一个排除短语不存在就返回真,而我们需要的是所有排除短语都不存在才允许for的匹配生效,应该用all函数
解决方案
首先拆分匹配词组,再按照需求写判断逻辑即可:
# 拆分两类匹配规则 normal_match = ['and', 'with', 'be in'] exc_list = ['for every','for each'] if (any(word in stringVar for word in normal_match)) or \ ('for' in stringVar and all(exc not in stringVar for exc in exc_list)): # 你的业务逻辑
逻辑验证
可以覆盖所有需求场景:
- 测试用例
will be in every day for each week:命中be in,直接返回真,符合预期 - 测试用例
for each test:仅命中for但存在排除短语for each,返回假,符合预期 - 测试用例
for normal test:仅命中for且无排除短语,返回真,符合预期 - 测试用例
for every test with xxx:命中with,直接返回真,符合预期
内容的提问来源于stack exchange,提问作者nimgwfc
相关产品推荐
相关产品推荐

