pin_drop当前位置:知识文库 ❯ 图文

Python字符串replace方法

概述

str.replace()方法是Python中用于替换字符串中指定子串的方法,它可以将字符串中的旧子串替换为新子串,并返回替换后的新字符串。由于字符串不可变,replace()不会修改原字符串,而是返回一个新字符串。本篇教程将详细介绍replace()方法的语法、替换次数控制、链式替换等用法。


replace语法

str.replace(old, new[, count])方法将字符串中的old子串替换为new子串。

参数说明

参数 含义 是否必需
old 要被替换的旧子串
new 替换后的新子串
count 最大替换次数 否,默认替换所有

基本用法

代码示例

s = "Hello, World!"
result = s.replace("World", "Python")
print(f"原字符串: {s}")
print(f"替换后: {result}")

提示replace()不修改原字符串,而是返回新字符串。原字符串保持不变。


替换次数

通过count参数控制替换的最大次数,从左到右依次替换:

代码示例

s = "one two one two one"

result = s.replace("one", "ONE")
print(f"替换所有: {result}")

result = s.replace("one", "ONE", 1)
print(f"替换1次: {result}")

result = s.replace("one", "ONE", 2)
print(f"替换2次: {result}")
调用方式 结果
s.replace("one", "ONE") ONE two ONE two ONE
s.replace("one", "ONE", 1) ONE two one two one
s.replace("one", "ONE", 2) ONE two ONE two one

替换次数的应用场景

代码示例

text = "价格:100元,优惠:20元,总计:80元"
result = text.replace("元", "人民币", 1)
print(result)

链式替换

replace()返回的是新字符串,因此可以链式调用,依次进行多个替换:

代码示例

s = "Hello, World! Hello, Python!"

result = s.replace("Hello", "Hi").replace("World", "Earth")
print(f"链式替换: {result}")

多个替换示例

代码示例

text = "2024-01-15"
result = text.replace("-", "年", 1).replace("-", "月", 1) + "日"
print(f"日期格式化: {result}")

sensitive = "我的手机号是13812345678,邮箱是test@example.com"
masked = sensitive.replace("13812345678", "138****5678").replace("test@", "***@")
print(f"脱敏处理: {masked}")

使用字典批量替换

代码示例

def multi_replace(text, replacements):
    for old, new in replacements.items():
        text = text.replace(old, new)
    return text

template = "尊敬的{name},您在{date}的订单{order_id}已发货。"
data = {"{name}": "张三", "{date}": "2024-01-15", "{order_id}": "ORD20240115001"}
result = multi_replace(template, data)
print(result)

特殊替换技巧

删除子串

new参数设为空字符串,即可删除指定子串:

代码示例

s = "Hello, World!"
result = s.replace(", ", " ")
print(f"删除逗号: {result}")

text = "电话:138-1234-5678"
result = text.replace("-", "")
print(f"删除横线: {result}")

替换空格

代码示例

s = "Hello World Python"
result = s.replace(" ", "_")
print(f"空格替换为下划线: {result}")

text = "多   余   空   格"
result = text.replace("   ", " ")
print(f"多余空格合并: {result}")

替换换行符

代码示例

text = "第一行\n第二行\n第三行"
result = text.replace("\n", " ")
print(f"换行替换为空格: {result}")

multi_line = "行1\r\n行2\r\n行3"
result = multi_line.replace("\r\n", "\n")
print(f"统一换行符: {result}")

代码示例

综合运用replace方法:

代码示例

template = """
尊敬的{name}:
    您好!感谢您于{date}购买我们的产品。
    订单号:{order_id}
    金额:{amount}元
    如有问题,请联系客服。
"""

data = {
    "{name}": "李先生",
    "{date}": "2024年1月15日",
    "{order_id}": "ORD20240115001",
    "{amount}": "299.00"
}

result = template.strip()
for key, value in data.items():
    result = result.replace(key, value)
print(result)

code = "def  hello():\n    print('hello')\n    return True"
indent_fixed = code.replace("  ", "    ")
print(f"\n缩进修正:\n{indent_fixed}")

phone = "13812345678"
masked = phone[:3] + "****" + phone[7:]
print(f"\n手机号脱敏: {masked}")

注意事项

提示

  • replace()不修改原字符串,返回的是新字符串,需要用变量接收结果

  • 如果old子串不存在,replace()返回原字符串的副本,不会报错

  • replace()是全局替换,如需只替换第一个,请指定count=1

  • 链式替换的顺序很重要,后续替换可能影响之前的结果

  • replace()区分大小写,"Hello".replace("hello", "Hi")不会生效

  • 空字符串替换会在每个字符之间插入新字符串


小结

本篇教程详细介绍了str.replace()方法的用法,包括基本替换、指定替换次数、链式替换、删除子串、批量替换等技巧。replace()是最常用的字符串操作方法之一,掌握它的各种用法可以高效处理文本替换需求。记住字符串不可变,replace()总是返回新字符串。


练习题

练习1

编写一个函数,接收一个字符串,将其中的所有连续空格(两个及以上)替换为单个空格。例如:"Hello World Python""Hello World Python"

练习2

编写一个模板替换函数,接收一个模板字符串和一个字典,将模板中所有{key}形式的占位符替换为字典中对应的值。

常见问题

replace()会修改原字符串吗?

不会。Python中的字符串是不可变对象,replace()不会修改原字符串,而是返回一个新字符串。必须用变量接收替换结果,否则替换操作将丢失。

如何只替换第一次出现的子串?

通过设置count参数为1,即可只替换第一次出现的子串。例如:s.replace("old", "new", 1)。replace()从左到右依次替换,设置count可以精确控制替换次数。

replace()支持正则表达式吗?

不支持。replace()只能替换固定的子串,不支持正则表达式。如果需要正则表达式替换,应使用re模块的sub()函数,它支持正则表达式匹配和替换。

链式替换的顺序有什么影响?

链式替换从左到右依次执行,后续替换可能影响前面替换的结果。例如:"abc".replace("a","b").replace("b","c")会得到"ccc"而不是"bcc",因为第一个replace把"a"变成了"b",第二个replace又把所有的"b"变成了"c"。

空字符串作为替换内容会发生什么?

将new参数设为空字符串可以删除指定的子串。但如果old参数是空字符串,Python会在每个字符之间插入new字符串,例如:"abc".replace("", "-")会得到"-a-b-c-"。

replace()和正则re.sub()哪个更快?

对于固定子串替换,replace()比re.sub()更快,因为replace()是C实现的专用函数,不需要编译正则表达式。只有在需要正则表达式匹配时,才应该使用re.sub()。

标签: Python replace方法 字符串替换 链式替换 文本处理 Python教程

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: Python字符串find方法 下一篇: Python字符串split方法

poll相关推荐

作者头像 智能小晨 python

Python元组命名namedtuple

发布日期 2026-05-31
深入学习Python命名元组namedtuple,掌握字段访问、_make创建、_asdict转字典、_replace替换字段等核心方法。理解命名元组与普通元组的区别,写出更清晰易读的Python代码。
作者头像 智能小晨 python

Python元组解包

发布日期 2026-05-31
全面学习Python元组解包技巧,包括基本解包、星号扩展解包、嵌套解包、交换变量和函数多值返回。掌握优雅的Python赋值语法,让你的代码更简洁高效。
作者头像 智能小晨 python

Python元组index方法

发布日期 2026-05-31
深入学习Python元组index()方法,掌握元素索引查找技巧。了解index()语法、指定范围查找、安全查找方法和实际应用场景,避免ValueError异常,提升Python编程效率。
作者头像 智能小晨 python

Python元组count方法

发布日期 2026-05-31
深入学习Python元组count()方法,掌握元素出现次数统计技巧。了解count()语法、性能优化建议、嵌套元组统计和实际应用场景,配合练习题巩固所学知识。