Python string contains 用于查找子串
Python string contains 使用 in 运算符检查子串是否出现在文本中。
当你需要快速的是/否判断来分支逻辑、验证输入或过滤消息时使用它。
它提供了一种简单、可读的方式来判断文本是否包含某个子串。
Python String Contains 示例:文本匹配
输出:
输出将显示在这里...
输出:
发送物流信息
示例解析
status字符串包含一条简短状态消息。- 表达式
"已发货" in status进行子串包含判断并返回True。 - 条件为真,因此
print被执行。 - 输出表明只有在存在关键词时才会触发动作。
常见错误
错误 1:以为判断不区分大小写。
subject = "FaHuo"
if "fahuo" in subject:
print("发送物流信息")
subject = "FaHuo"
if "fahuo" in subject.casefold():
print("发送物流信息")
原因:in 会精确比较字符,因此大小写必须一致。需要忽略大小写时,可对字符串进行统一处理(如 casefold())。
错误 2:在真值判断中使用 find()。
message = "促销"
if message.find("促"):
print("标记")
message = "促销"
if "促" in message:
print("标记")
原因:find() 返回索引,而索引 0 在布尔上下文中为假,即使找到了子串。使用 in 做布尔判断,或在需要位置时将 find() 与 -1 比较。
错误 3:忘记空字符串总是匹配。
needle = ""
text = "发票 123"
if needle in text:
print("匹配")
needle = ""
text = "发票 123"
if needle and needle in text:
print("匹配")
原因:Python 认为空字符串是任何字符串的子串。若空输入应表示“不匹配”,要先做非空判断。
string contains vs find:怎么选
| 需求 | 使用 |
|---|---|
| 只要是/否答案 | needle in text |
| 需要匹配位置 | text.find(needle) |
| 缺失时抛错 | text.index(needle) |
使用 in 进行最快、最清晰的包含判断。只有在需要位置或希望缺失时抛错时才使用 find() 或 index()。
性能考虑
字符串包含判断会线性扫描文本,因此每次 in 都是 O(n)(n 为文本长度)。对于重复的大小写无关检查,可先把文本统一处理(例如 text = text.casefold())再复用,避免重复工作。如果必须在超大文本中搜索很多不同模式,再考虑更专业的搜索或正则,只在模式需要时使用。
何时使用 Python string contains
- 需要快速判断子串是否存在以决定分支逻辑。
- 通过关键词或标记验证输入。
- 希望得到最清晰的布尔结果而非索引。
- 不需要通配符或复杂模式;需要时使用
re。 - 不需要匹配位置;需要位置时使用
find()或index()。