Python字符串包含检查错误排查及替代方法咨询
字符串包含检查的正确实现方法
你当前代码的问题是搞反了in运算符的判断方向:
STRING in ['tudo','ta','esta']是判断整个STRING是否是列表中的某一项,而非STRING包含列表里的任意单词;STRING in '?'是判断整个STRING是否等于'?',而非STRING包含问号字符。
以下是几种正确实现字符串包含检查的方法:
1. 修正in运算符的用法
将判断逻辑反转,用子串/字符 in STRING检查单个内容;对于多个候选子串,用any()函数遍历判断:
STRING = "some string ?" # 检查是否包含列表中任意单词 print('the STRING contains [tudo, ta OU esta] ?') print(any(word in STRING for word in ['tudo','ta','esta'])) print('\n the STRING contains [bem OU bom] ?') print(any(word in STRING for word in ['bem','bom'])) print('\n the STRING contains "?" ?') print('?' in STRING)
2. 使用str.find()方法
str.find(sub)返回子串在字符串中的起始索引,找不到则返回-1,通过判断返回值是否不为-1实现检查:
# 检查单个问号 print('?' in STRING) # 等价于下面的写法 print(STRING.find('?') != -1) # 封装函数检查多个候选子串 def contains_any(target_str, substr_list): for substr in substr_list: if target_str.find(substr) != -1: return True return False print(contains_any(STRING, ['tudo','ta','esta']))
3. 正则表达式(适用于复杂匹配场景)
如果需要更灵活的匹配规则(比如忽略大小写、匹配完整单词等),可以使用re模块:
import re # 检查是否包含列表中任意单词 match_pattern = re.compile(r'tudo|ta|esta') print(bool(match_pattern.search(STRING))) # 检查是否包含问号 print(bool(re.search(r'\?', STRING)))
内容的提问来源于stack exchange,提问作者eduardo
相关产品推荐
相关产品推荐

