Python字符串查找替换应据需求选方法:find/index查存在性,replace批量替换固定文本,re.sub处理复杂模式;注意字符串不可变、正则贪婪匹配等细节。

Python字符串查找替换不难,但想高效、安全、少出错,得选对方法。内置方法够用,正则更灵活,而实际处理中常要兼顾性能、可读性和边界情况。
基础查找:用 find 和 index 判断存在性
find() 返回首次匹配索引,没找到返回 -1;index() 同样找位置,但找不到会抛 ValueError。日常推荐用 find,避免异常干扰逻辑。
- 检查子串是否存在:
if text.find("abc") != -1: - 找所有出现位置:可用循环配合
find(text, start)迭代,比正则轻量(尤其简单字面量) - 注意:二者都区分大小写,如需忽略,先转小写再查
text.lower().find(keyword.lower())
基础替换:用 replace 快速批量改写
str.replace(old, new[, count]) 最常用。默认全替换,加 count 可限次数,适合“只换前 N 处”的场景。
- 替换固定文本最快最安全,比如清理空格:
s.replace(" ", " ") - 慎用在含特殊字符的字符串上——它不识别转义,纯按字面匹配
- 不能基于位置或条件替换,例如“只换第3个逗号后的内容”,就得换别的方法
复杂模式:用 re.sub 精准控制逻辑
当要按格式、上下文、分组或动态生成替换内容时,正则表达式是主力。核心是 re.sub(pattern, repl, string)。
立即学习“Python免费学习笔记(深入)”;
- 用捕获组复用原文:
re.sub(r"(\d{4})-(\d{2})", r"\2/\1", "2023-12") → "12/2023" - 用函数做动态替换:
re.sub(r"\d+", lambda m: str(int(m.group()) * 2), "a1b22c3") - 提前编译正则提升性能:
pattern = re.compile(r"\s+");pattern.sub(" ", text)(多次使用时明显更快)
实战提醒:避开常见坑
字符串不可变,所有“替换”操作都返回新对象,原变量不变;大量拼接建议用 join() 而非多次 +=;正则注意贪婪匹配(.* 易跨段),必要时用 .*? 或限定范围。










