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()