Python3 字符串操作详解:从基础到高级技巧
字符串是 Python 中最常用的数据类型之一,用于表示文本信息。Python 提供了丰富的字符串操作方法,从基础的拼接、切片到高级的正则匹配,覆盖了几乎所有文本处理场景。本文系统讲解 Python3 字符串的核心操作,帮助你高效处理文本数据。
字符串基础:定义与特性
1. 字符串定义
Python 中字符串可以用单引号(')、双引号(")或三引号(''' 或 """)定义,三引号可用于多行字符串:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| str1 = 'Hello Python'
str2 = "Hello Python"
str3 = '''第一行 第二行 第三行'''
print(str3)
|
2. 字符串特性
基础操作:拼接、重复与转换
1. 字符串拼接
- 使用
+ 运算符拼接字符串(仅能拼接字符串类型)
- 使用
, 在 print() 中拼接(会自动添加空格)
- 使用
* 重复字符串
1 2 3 4 5 6 7 8 9 10 11
| s1 = "Hello" s2 = "World"
print(s1 + " " + s2)
print(s1, s2)
print("-" * 10)
|
2. 类型转换
str():将其他类型转为字符串
int()/float():字符串转数字(需字符串格式合法)
1 2 3 4 5 6 7 8 9 10
| num = 123 print(str(num) + "是数字")
s_num = "456" print(int(s_num) + 1)
s_float = "3.14" print(float(s_float) + 0.86)
|
索引与切片:获取字符串的部分内容
1. 索引(获取单个字符)
字符串的每个字符有唯一索引:
- 正向索引:从 0 开始(第一个字符索引为 0)
- 反向索引:从 -1 开始(最后一个字符索引为 -1)
1 2 3 4 5 6 7 8
| s = "Python"
print(s[0]) print(s[2]) print(s[-1]) print(s[-3])
|
2. 切片(获取子串)
语法:s[start:end:step]
start:起始索引(包含,默认 0)
end:结束索引(不包含,默认字符串长度)
step:步长(默认 1,负数表示反向切片)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| s = "abcdefghij"
print(s[2:5])
print(s[:5])
print(s[5:])
print(s[::2])
print(s[::-1])
print(s[5:2:-1])
|
常用字符串方法
Python 字符串提供了大量内置方法,以下是最常用的类别:
1. 查找与替换
s.find(sub):查找子串 sub 首次出现的索引(未找到返回 -1)
s.rfind(sub):从右侧查找子串首次出现的索引
s.index(sub):类似 find,但未找到会报错
s.replace(old, new):替换所有 old 为 new
1 2 3 4 5 6 7 8 9 10
| s = "hello world, hello python"
print(s.find("hello")) print(s.find("hello", 5)) print(s.rfind("hello"))
print(s.replace("hello", "hi")) print(s.replace("hello", "hi", 1))
|
2. 大小写转换
s.lower():转为小写
s.upper():转为大写
s.title():每个单词首字母大写
s.capitalize():仅首字母大写
1 2 3 4 5 6
| s = "hello WORLD"
print(s.lower()) print(s.upper()) print(s.title()) print(s.capitalize())
|
3. 去除空白
s.strip():去除两端空白(空格、换行 \n、制表符 \t 等)
s.lstrip():去除左端空白
s.rstrip():去除右端空白
1 2 3 4
| s = " \t hello \n " print(f"|{s.strip()}|") print(f"|{s.lstrip()}|")
|
4. 分割与连接
s.split(sep):按 sep 分割字符串为列表(默认按任意空白分割)
s.join(iterable):用 s 连接可迭代对象中的元素
1 2 3 4 5 6 7 8 9 10 11
| s = "apple,banana,orange" print(s.split(","))
s2 = "hello world python" print(s2.split())
fruits = ['apple', 'banana', 'orange'] print(",".join(fruits)) print(" ".join(fruits))
|
5. 判断字符串特性
s.startswith(prefix):是否以 prefix 开头
s.endswith(suffix):是否以 suffix 结尾
s.isdigit():是否全为数字
s.isalpha():是否全为字母
s.isalnum():是否全为字母或数字
s.islower()/s.isupper():是否全为小写 / 大写
1 2 3 4 5 6 7
| s = "Python123"
print(s.startswith("Py")) print(s.endswith("3")) print(s.isdigit()) print(s.isalpha()) print(s.isalnum())
|
格式化字符串:三种常用方式
1. % 格式化(传统方式)
使用 % 作为占位符,常用格式:%s(字符串)、%d(整数)、%f(浮点数)
1 2 3 4 5 6 7 8 9
| name = "Alice" age = 25 height = 1.65
print("姓名:%s,年龄:%d,身高:%.2f米" % (name, age, height))
|
使用 {} 作为占位符,支持位置参数、关键字参数和格式控制
1 2 3 4 5 6 7 8 9 10 11
| name = "Bob" age = 30
print("姓名:{},年龄:{}".format(name, age))
print("姓名:{n},年龄:{a}".format(n=name, a=age))
print("圆周率:{:.2f}".format(3.1415926))
|
3. f-string(Python3.6+,最简洁)
在字符串前加 f 或 F,直接在 {} 中使用变量或表达式
1 2 3 4 5 6 7 8 9 10 11
| name = "Charlie" age = 28
print(f"姓名:{name},年龄:{age}")
print(f"明年年龄:{age + 1}")
print(f"编号:{12:03d}")
|
高级操作:正则表达式
对于复杂的字符串处理(如提取邮箱、验证手机号),可使用 re 模块(正则表达式):
1 2 3 4 5 6 7 8 9 10 11 12 13
| import re
s = "年龄:25,体重:65kg,身高:175cm" numbers = re.findall(r"\d+", s) print(numbers)
phone = "13812345678" if re.match(r"^1\d{10}$", phone): print(f"{phone} 是有效的手机号") else: print(f"{phone} 是无效的手机号")
|
实战案例
案例 1:统计字符串中单词出现次数
1 2 3 4 5 6 7 8 9 10 11 12 13
| def count_words(s): s_clean = s.lower().replace(",", "").replace(".", "") words = s_clean.split() word_count = {} for word in words: word_count[word] = word_count.get(word, 0) + 1 return word_count
text = "Hello world! Hello Python. Python is great, world is great." print(count_words(text))
|
案例 2:字符串反转
1 2 3 4 5
| def reverse_string(s): return s[::-1]
print(reverse_string("Python")) print(reverse_string("Hello World"))
|
总结
Python 字符串操作核心要点:
- 字符串是不可变序列,支持索引和切片
- 掌握
+ 拼接、* 重复、split()/join() 等基础操作
- 熟练使用字符串方法:
find()、replace()、strip()、lower()/upper() 等
- 格式化字符串优先使用
f-string(简洁高效)
- 复杂文本处理可借助
re 模块的正则表达式
v1.3.10