如何在Python中不使用OR语句判断字符串是否包含多个指定子串
Python无需OR语句实现多子串匹配的方案
完全可以不使用or语句实现和原代码完全一致的逻辑,以下是几种常用的实现方式:
- 使用
any()内置函数(最推荐)
把所有需要匹配的子串存入列表或元组,利用any()的短路迭代特性:只要任意一个子串存在于目标字符串中就返回True,逻辑和原or写法完全等价,后续新增匹配规则只需要修改子串集合即可,可维护性更高。
示例代码:a = '/dvi/abcbbb' match_subs = ('/dev/', '/dv/', '/dvi/') if any(sub in a for sub in match_subs): print(a) # 输出:/dvi/abcbbb - 使用正则表达式匹配
借助正则的多选分支符|实现多子串匹配,调用re.search()判断是否存在命中项。如果匹配子串包含正则特殊字符,需要先用re.escape()处理避免转义异常。
示例代码:
如果匹配项较多,也可以通过字符串拼接生成正则规则:import re a = '/dvi/abcbbb' if re.search(r'/dev/|/dv/|/dvi/', a): print(a) # 输出:/dvi/abcbbbmatch_subs = ('/dev/', '/dv/', '/dvi/') pattern = '|'.join(re.escape(sub) for sub in match_subs) if re.search(pattern, a): print(a) - 使用标记位逐次判断
自定义标记变量记录匹配结果,逐次校验每个子串后再执行打印逻辑,适合不想引入额外依赖的场景。
示例代码:a = '/dvi/abcbbb' is_match = False if '/dev/' in a: is_match = True if '/dv/' in a: is_match = True if '/dvi/' in a: is_match = True if is_match: print(a) # 输出:/dvi/abcbbb
内容的提问来源于stack exchange,提问作者Suraj Tripathi
相关产品推荐
相关产品推荐

