Python字符串操作指南
Python的string模块提供了丰富的字符串操作功能,从基础常量到高级格式化,涵盖了日常开发中的大多数需求。本文将按照从基础到高级的顺序,讲解Python字符串的核心功能。
一、字符串常量
string模块定义了一系列实用的字符串常量,可以直接在程序中使用,常用于验证输入、生成随机字符串等场景。
1. 字符串常量语法
以下是string模块中定义的常用字符串常量:
| API | 说明 | 示例(值) |
|---|---|---|
string.ascii_letters |
ASCII字母(小写+大写) | 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' |
string.ascii_lowercase |
ASCII小写字母 | 'abcdefghijklmnopqrstuvwxyz' |
string.ascii_uppercase |
ASCII大写字母 | 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' |
string.digits |
十进制数字 | '0123456789' |
string.hexdigits |
十六进制数字 | '0123456789abcdefABCDEF' |
string.octdigits |
八进制数字 | '01234567' |
string.punctuation |
ASCII标点符号 | '!"#$%&\'()*+,-./:;<=>?@[\\]^_{|}~’` |
string.printable |
所有可打印字符 | 包含数字、字母、标点和空白字符 |
string.whitespace |
空白字符 | ' \t\n\r\x0b\x0c' |
示例
1 | |
输出:
1 | |
二、字符串格式化
Python提供了多种字符串格式化方法,用于将变量插入到字符串中。最常用的是str.format()方法和f-string(Python 3.6+)。
1. str.format()方法语法
str.format()方法通过大括号{}作为占位符,支持位置参数、关键字参数和格式说明符。
| API | 说明 | 示例(用法) |
|---|---|---|
"{}".format(value) |
基本位置参数 | "Hello, {}".format("World") |
"{0} {1}".format(a, b) |
索引位置参数 | "{1} {0}".format("A", "B") |
"{name}".format(name=value) |
关键字参数 | "{greet}".format(greet="Hi") |
"{value:.2f}".format(value=3.14159) |
格式说明符(浮点数) | "{:.2f}".format(3.14159) |
"{:<10}".format("text") |
左对齐(宽度10) | "{:<10}".format("test") |
"{:>10}".format("text") |
右对齐(宽度10) | "{:>10}".format("test") |
"{:^10}".format("text") |
居中对齐(宽度10) | "{:^10}".format("test") |
"{:*^10}".format("text") |
填充字符对齐 | "{:*^10}".format("test") |
2. 数字格式化选项
| 格式说明符 | 说明 | 示例(用法) |
|---|---|---|
"{:,}".format(1234567) |
千位分隔符 | "{:,}".format(1234567) |
"{:_}".format(1234567) |
下划线分隔符 | "{:_}".format(1234567) |
"{:+}".format(42) |
总是显示符号 | "{:+}".format(42) |
"{: }".format(42) |
正数前加空格 | "{: }".format(42) |
"{:b}".format(255) |
二进制表示 | "{:b}".format(255) |
"{:o}".format(255) |
八进制表示 | "{:o}".format(255) |
"{:x}".format(255) |
十六进制小写 | "{:x}".format(255) |
"{:#x}".format(255) |
十六进制带前缀 | "{:#x}".format(255) |
"{:e}".format(1234.56) |
科学计数法 | "{:e}".format(1234.56) |
"{:.1%}".format(0.85) |
百分比格式 | "{:.1%}".format(0.85) |
示例
1 | |
输出:
1 | |
3. f-string语法(Python 3.6+)
f-string提供更简洁的格式化语法,在字符串前加f或F,用大括号包裹表达式。
| API | 说明 | 示例(用法) |
|---|---|---|
f"{var}" |
变量插值 | name = "Alice"; f"Hello {name}" |
f"{expr}" |
表达式计算 | f"{10 + 20}" |
f"{var.upper()}" |
方法调用 | f"{'hello'.upper()}" |
f"{len(lst)}" |
函数调用 | f"{len([1,2,3])}" |
f"{var:.2f}" |
格式说明符 | f"{3.14159:.2f}" |
f"{var:#x}" |
进制转换 | f"{255:#x}" |
示例
1 | |
输出:
1 | |
三、字符串方法
Python字符串对象提供了丰富的内置方法,用于大小写转换、查找替换、分割连接等操作。
1. 大小写转换方法
| API | 说明 | 示例(用法) |
|---|---|---|
str.upper() |
转换为大写 | "hello".upper() |
str.lower() |
转换为小写 | "HELLO".lower() |
str.capitalize() |
首字母大写 | "hello world".capitalize() |
str.title() |
每个单词首字母大写 | "hello world".title() |
str.swapcase() |
大小写互换 | "Hello World".swapcase() |
str.casefold() |
更激进的小写转换 | "Straße".casefold() |
示例
1 | |
输出:
1 | |
2.空白处理
| API | 说明 | 示例(用法) |
|---|---|---|
str.strip([chars]) |
去除两端空白或指定字符 | " hello ".strip() |
str.lstrip([chars]) |
去除左端空白或指定字符 | " hello ".lstrip() |
str.rstrip([chars]) |
去除右端空白或指定字符 | " hello ".rstrip() |
示例
1 | |
输出:
1 | |
3. 查找和替换
| API | 说明 | 示例(用法) |
|---|---|---|
str.find(sub[, start[, end]]) |
查找子串,返回索引 | "hello".find("l") |
str.rfind(sub[, start[, end]]) |
从右侧查找子串 | "hello".rfind("l") |
str.index(sub[, start[, end]]) |
类似find,找不到时抛异常 | "hello".index("l") |
str.rindex(sub[, start[, end]]) |
从右侧查找,找不到时抛异常 | "hello".rindex("l") |
str.count(sub[, start[, end]]) |
统计子串出现次数 | "hello".count("l") |
str.replace(old, new[, count]) |
替换子串 | "hello".replace("l", "x") |
示例
1 | |
输出:
1 | |
4. 分割和连接
| API | 说明 | 示例(用法) |
|---|---|---|
str.split(sep=None, maxsplit=-1) |
分割字符串 | "a,b,c".split(",") |
str.rsplit(sep=None, maxsplit=-1) |
从右侧分割 | "a,b,c".rsplit(",", 1) |
str.splitlines([keepends]) |
按行分割 | "a\nb\nc".splitlines() |
str.partition(sep) |
分割为三部分 | "a,b,c".partition(",") |
str.rpartition(sep) |
从右侧分割为三部分 | "a,b,c".rpartition(",") |
str.join(iterable) |
连接字符串 | ",".join(['a', 'b', 'c']) |
示例
1 | |
输出:
1 | |
5. 字符串判断
| API | 说明 | 示例(用法) |
|---|---|---|
str.startswith(prefix[, start[, end]]) |
是否以指定前缀开头 | "hello".startswith("he") |
str.endswith(suffix[, start[, end]]) |
是否以指定后缀结尾 | "hello".endswith("lo") |
str.isalpha() |
是否全为字母 | "hello".isalpha() |
str.isdigit() |
是否全为数字 | "123".isdigit() |
str.isalnum() |
是否全为字母或数字 | "abc123".isalnum() |
str.isdecimal() |
是否全为十进制数字 | "123".isdecimal() |
str.isnumeric() |
是否全为数字字符 | "½".isnumeric() |
str.islower() |
是否全为小写 | "hello".islower() |
str.isupper() |
是否全为大写 | "HELLO".isupper() |
str.isspace() |
是否全为空白字符 | " \t\n".isspace() |
str.istitle() |
是否每个单词首字母大写 | "Hello World".istitle() |
示例
1 | |
输出:
1 | |
6. 填充和对齐
| API | 说明 | 示例(用法) |
|---|---|---|
str.center(width[, fillchar]) |
居中对齐 | "test".center(10, "*") |
str.ljust(width[, fillchar]) |
左对齐 | "test".ljust(10, "*") |
str.rjust(width[, fillchar]) |
右对齐 | "test".rjust(10, "*") |
str.zfill(width) |
用零填充 | "42".zfill(5) |
示例
1 | |
输出:
1 | |
四、模板字符串
string模块提供了Template类,用于简单的变量替换,比str.format()更安全,适合处理用户提供的模板。
1. Template类方法
| API | 说明 | 示例(用法) |
|---|---|---|
Template(template) |
创建模板对象 | Template("Hello $name") |
template.substitute(mapping) |
替换模板变量 | Template("$x + $y").substitute(x=1, y=2) |
template.safe_substitute(mapping) |
安全替换,缺少变量时不抛异常 | Template("$x").safe_substitute() |
Template.delimiter |
分隔符(默认$) |
可覆盖为其他字符 |
Template.idpattern |
标识符模式 | 可覆盖以改变变量名规则 |
示例
1 | |
输出:
1 | |