CC++ & Algorithm

Python字符串分割与替换

困难2
语言版本:C++Python
概述:学习如何用某个符号把字符串拆成多段,以及把某段文字换成别的文字。

字符串分割与替换:像拆糖葫芦和换糖豆一样简单

字符串就像一串糖葫芦,有时我们需要把它拆成一颗颗果子(分割),有时又需要把其中某颗果子换成另一种(替换)。Python 提供了一些超级方便的方法来做到这一点,今天我们就来学习 split()replace() 这两个好帮手。


1. 用分隔符来切分——split() 方法

想象你有一串糖葫芦,想吃哪颗就摘哪颗。split(分隔符) 会把字符串按照指定分隔符切开,切完后得到一个列表(列表就像一串小标签,每个元素都是一段文字)。如果不给分隔符,默认按空格(包括多个空格、Tab 等空白字符)切分。

例子: 你有一个句子,里面是水果名字,用空格隔开。

# 诗句,水果用空格隔开
sentence = "apple banana cherry"
fruits = sentence.split()  # 默认按空格分割
print(fruits)              # 输出: ['apple', 'banana', 'cherry']

生活中的例子: 你的零花钱清单 "10 20 30",用空格分隔,就能得到每项金额的字符串。

如果使用逗号分隔,比如记录颜色:

# 用逗号分隔的颜色列表
csv_data = "红,蓝,绿,黄"
colors = csv_data.split(",")  # 按逗号分割
print(colors)                 # 输出: ['红', '蓝', '绿', '黄']

拓展: split() 还可以指定最大切分次数。比如字符串 "2025-03-15-作业",你只想切前三段,可以写 split("-", 2) 表示只切两次(得到3段)。但初学者先掌握基本用法就够了。


2. 取切分后的某一段

因为 split() 返回的是列表,你可以像拿糖葫芦上第几颗果子一样,用索引来取某一颗。索引从 0 开始,colors[0] 就是第一个元素 '红'

# 从颜色列表取第二个颜色
csv_data = "红,蓝,绿,黄"
colors = csv_data.split(",")
first_color = colors[0]   # 第一个颜色
second_color = colors[1]  # 第二个颜色
print(first_color)         # 红
print(second_color)        # 蓝

常见错误: 学生可能会直接对字符串用索引,比如 csv_data[0],得到的是第一个字符 '红' 吗?不对!因为字符串索引取的是单个字符,而这里 csv_data[0] 实际上是 '红' 字本身(但中文一个汉字是一个字符),但你想取的是整段颜色名,所以必须先用 split() 切开。


3. 替换文字——replace() 方法

有时候你不想要某颗果子,想换成另一种,这就是替换。replace(旧子串, 新子串) 会把字符串中所有的旧子串替换成新子串,并返回一个新字符串。原字符串不会改变,就像你记录在纸上的文字,替换方法是给你一张新纸条,原纸条依然保留。

# 替换单词
text = "I like cats."
new_text = text.replace("cats", "dogs")  # 把cats换成dogs
print(new_text)            # 输出: I like dogs.
print(text)                # 原字符串不变: I like cats.

生活中的例子: 你写了一句话 "今天吃苹果",想改成 "今天吃香蕉",就可以用 replace("苹果", "香蕉")


4. 限制替换次数

默认会替换所有出现的旧子串。但如果你想只替换前几次,可以加第三个参数。比如有一个句子 "one one one",只想把前两个 "one" 换成 "two"

# 只替换前两次
s = "one one one"
result = s.replace("one", "two", 2)  # 第三个参数2
print(result)                        # 输出: two two one

常见错误: 有些人会写 s.replace("one", "two", 2) 然后以为 s 变了,但其实 s 还是原来的字符串,需要把结果赋给一个新变量。


5. 分割后处理数字(计算总分)

很多程序需要从字符串中提取数字。比如老师给你一串考试分数,用空格隔开,你需要计算总分。注意:分割后得到的每个元素都是字符串,不能直接相加,得用 int()float() 转换成数字。

# 用空格分隔的分数字符串
scores_str = "85 92 78 90"
score_list = scores_str.split()  # 得到 ['85','92','78','90']
total = 0
for score_str in score_list:     # 遍历每个分数字符串
    total += int(score_str)      # 转成整数再加
print(total)                     # 输出: 345

生活例子: 你的零花钱列表 "10 20 5 15",求和就能知道一共多少钱。


6. 常见错误提醒(新手必看)

错误行为说明正确做法
忘记赋新变量text.replace("a","b") 不赋值,原字符串不变new_text = text.replace(...)
分割后直接当数字用parts = "10 20".split(); total = parts[0] + parts[1] 得到 '1020' 字符串拼接先转数字 int(parts[0]) + int(parts[1])
在字符串上直接索引"abc,def".split(",")[0] 是对的,但有人用 "abc,def"[0] 得到 'a'想取整段要用 split 后的列表
假设替换会修改原字符串这是最常见误解记住字符串是不可变的,必须用新变量接收

7. 完整示例:清理用户输入并统计单词数

假设你写一个程序,让用户输入一句话,你打印出这句话有多少个单词(按空格划分),并且把其中的某个单词“坏蛋”替换成“**”做屏蔽。代码要能处理多余空格。

# 输入一句话,可能有多余空格
user_input = "  今天  天气  真好   坏蛋 来了  "

# 1. 去掉首尾空格(strip()是另一个好方法)
clean_input = user_input.strip()

# 2. 按空格分割(split默认会处理连续空格)
words = clean_input.split()   # 得到单词列表,['今天','天气','真好','坏蛋','来了']

# 3. 统计单词数
word_count = len(words)
print("单词个数:", word_count)  # 输出: 5

# 4. 将 "坏蛋" 替换成 "**"
safe_text = clean_input.replace("坏蛋", "**")
print("替换后:", safe_text)    # 输出: 今天 天气 真好 ** 来了

# 注意:原字符串 clean_input 不变

运行这段代码,你会看到:

单词个数: 5
替换后: 今天 天气 真好 ** 来了

8. 相关知识点指引

  • strip() 方法:去掉字符串首尾的空白字符(空格、换行等),常与 split 配合清理输入。
  • join() 方法:把列表中的元素用指定分隔符拼成一个字符串,和 split 正好相反。例如 "-".join(["2025","03","15"]) 得到 "2025-03-15"
  • find()in 关键字:检查字符串中是否包含某个子串,比如 "hello" in "hello world" 返回 True
  • 字符串切片:可以用 s[start:end] 直接取一段字符,比如 "hello"[1:4] 得到 "ell"

现在你已经掌握了分割和替换的魔法,可以像文字魔术师一样轻松改造字符串了!快去试试吧!

例题精讲

1单选题

请问在Python中,字符串方法'split()'如果不传入任何参数,默认使用什么作为分隔符?

A空格
B逗号
C换行符
D制表符
2单选题

执行语句'"apple,banana,apple,grape".replace("apple","orange",1)'后,返回的结果是什么?

A"orange,banana,apple,grape"
B"orange,banana,orange,grape"
C"apple,banana,orange,grape"
D"orange,banana,grape"
3判断题

在Python中,字符串的split()方法返回的是一个列表,而不是字符串。

4填空题
给定字符串s = "2024-12-25",请将其中的'-'替换为'/',得到字符串'2024/12/25'。补全代码:s.____("-", "/")
5填空题
已知字符串email = "student@example.com",请使用split()方法提取出用户名部分(即@之前的内容),补全代码:email.____("@")[0]