Python 字符串完全指南:创建、访问、格式化与内置方法大全
字符串创建
字符串是 Python 中最流行的类型。用引号括起字符即可创建。Python 对单双引号一视同仁。创建字符串即给变量赋值:
var1 = 'Hello World!' var2 = "Python Programming"
访问字符串值
Python 无字符类型;长度为 1 的字符串也视为子串。
使用方括号切片及索引获取子串。例如:
在线演示#!/usr/bin/python var1 = 'Hello World!' var2 = "Python Programming" print "var1[0]: ", var1[0] print "var2[1:5]: ", var2[1:5]
执行结果:
var1[0]: H var2[1:5]: ytho
更新字符串
可通过(重新)赋值变量来"更新"字符串。新值可关联前值,也可完全不同:
在线演示#!/usr/bin/python var1 = 'Hello World!' print "Updated String :- ", var1[:6] + 'Python'
执行结果:
Updated String :- Hello Python
转义字符
以下表列出可用反斜杠表示的转义/非打印字符:
| 反斜杠表示 | 十六进制字符 | 说明 |
|---|---|---|
| \a | 0x07 | 响铃或警报 |
| \b | 0x08 | 退格 |
| \cx | Control-x | |
| \C-x | Control-x | |
| \e | 0x1b | Escape |
| \f | 0x0c | 换页 |
| \M-\C-x | Meta-Control-x | |
| \n | 0x0a | 换行 |
| \nnn | 八进制表示,n 范围 0-7 | |
| \r | 0x0d | 回车 |
| \s | 0x20 | 空格 |
| \t | 0x09 | 制表符 |
| \v | 0x0b | 垂直制表 |
| \x | 字符 x | |
| \xnn | 十六进制表示,n 范围 0-9、a-f、A-F |
字符串特殊运算符
假设字符串变量 a 为 'Hello',b 为 'Python':
| 运算符 | 描述 | 示例 |
|---|---|---|
| + | 连接 - 将运算符两侧值相加 | a + b 得到 HelloPython |
| * | 重复 - 创建新字符串,连接多个相同字符串副本 | a*2 得到 HelloHello |
| [] | 切片 - 获取给定索引字符 | a[1] 得到 e |
| [ : ] | 范围切片 - 获取给定范围字符 | a[1:4] 得到 ell |
| in | 成员 - 字符存在于指定字符串返回真 | H in a 返回 1 |
| not in | 成员 - 字符不存在于指定字符串返回真 | M not in a 返回 1 |
| r/R | 原始字符串 - 抑制转义字符实际含义。语法同普通字符串,除在引号前加字母 "r"。r 可大小写,必须紧邻首个引号 | print r'\n' 打印 \n,print R'\n' 打印 \n |
| % | 格式化 - 执行字符串格式化 | 见下节 |
字符串格式化运算符
Python 最酷特性之一是字符串格式化运算符 %。此运算符专用于字符串,弥补了 C 的 printf() 族函数缺失。简单示例:
在线演示#!/usr/bin/python
print "My name is %s and weight is %d kg!" % ('Zara', 21)
执行结果:
My name is Zara and weight is 21 kg!
可用于 % 的完整符号集:
| 格式符号 | 转换 |
|---|---|
| %c | 字符 |
| %s | 格式化前通过 str() 转字符串 |
| %i | 有符号十进制整数 |
| %d | 有符号十进制整数 |
| %u | 无符号十进制整数 |
| %o | 八进制整数 |
| %x | 十六进制整数(小写字母) |
| %X | 十六进制整数(大写字母) |
| %e | 指数符号(小写 e) |
| %E | 指数符号(大写 E) |
| %f | 浮点实数 |
| %g | %f 和 %e 中较短者 |
| %G | %f 和 %E 中较短者 |
其他支持符号和功能:
| 符号 | 功能 |
|---|---|
| * | 参数指定宽度或精度 |
| - | 左对齐 |
| + | 显示符号 |
| <sp> | 正数前留空格 |
| # | 添加八进制前导零('0')或十六进制前导'0x'/'0X'(视'x'/'X'而定) |
| 0 | 左侧用零填充(而非空格) |
| % | '%%' 保留单个 '%' |
| (var) | 映射变量(字典参数) |
| m.n. | m 为最小总宽度,n 为小数点后显示位数(如适用) |
三引号
Python 三引号允许字符串跨多行,包含逐字 NEWLINEs、TABs 和其他特殊字符。
三引号语法为三个连续单引号或双引号。
在线演示#!/usr/bin/python para_str = """this is a long string that is made up of several lines and non-printable characters such as TAB ( \t ) and they will show up that way when displayed. NEWLINEs within the string, whether explicitly given like this within the brackets [ \n ], or just a NEWLINE within the variable assignment will also show up. """ print para_str
执行结果。注意每个特殊字符都转为打印形式,包括结尾处的 NEWLINE。NEWLINE 由显式回车或转义码 (\n) 产生:
this is a long string that is made up of several lines and non-printable characters such as TAB ( ) and they will show up that way when displayed. NEWLINEs within the string, whether explicitly given like this within the brackets [ ], or just a NEWLINE within the variable assignment will also show up.
原始字符串完全不将反斜杠视为特殊字符。原始字符串中每字符保持原样:
在线演示#!/usr/bin/python print 'C:\\nowhere'
执行结果:
C:\nowhere
使用原始字符串,表达式置于 r'expression':
在线演示#!/usr/bin/python print r'C:\\nowhere'
执行结果:
C:\\nowhere
Unicode 字符串
普通字符串内部存储为 8 位 ASCII,Unicode 字符串存储为 16 位 Unicode,支持世界上大多数语言的特殊字符。仅作以下介绍:
在线演示#!/usr/bin/python print u'Hello, world!'
执行结果:
Hello, world!
Unicode 字符串用前缀 u,如原始字符串用前缀 r。
内置字符串方法
Python 提供以下内置方法操作字符串:
| 序号 | 方法与说明 |
|---|---|
| 1 | capitalize() - 字符串首字母大写 |
| 2 | center(width, fillchar) - 返回原字符串居中、用填充字符填充至宽度 width 的字符串 |
| 3 | count(str, beg=0, end=len(string)) - 统计 str 在字符串或子串中出现次数 |
| 4 | decode(encoding='UTF-8', errors='strict') - 用注册编码解码字符串 |
| 5 | encode(encoding='UTF-8', errors='strict') - 返回字符串编码版本,错误时默认抛出 ValueError,除非 errors 为 'ignore' 或 'replace' |
| 6 | endswith(suffix, beg=0, end=len(string)) - 判断字符串/子串是否以 suffix 结尾 |
| 7 | expandtabs(tabsize=8) - 将字符串制表符展开为多空格,默认每制表符 8 空格 |
| 8 | find(str, beg=0, end=len(string)) - 查找 str 在字符串/子串中位置,找到返回索引,否则 -1 |
| 9 | index(str, beg=0, end=len(string)) - 同 find(),但未找到时抛异常 |
| 10 | isalnum() - 至少 1 字符且全为字母数字返回真,否则假 |
| 11 | isalpha() - 至少 1 字符且全为字母返回真,否则假 |
| 12 | isdigit() - 仅含数字返回真,否则假 |
| 13 | islower() - 至少 1 字符且全为小写返回真,否则假 |
| 14 | isnumeric() - Unicode 字符串仅含数字字符返回真,否则假 |
| 15 | isspace() - 仅含空白字符返回真,否则假 |
| 16 | istitle() - 字符串正确"标题化"返回真,否则假 |
| 17 | isupper() - 至少 1 字符且全为大写返回真,否则假 |
| 18 | join(seq) - 将序列 seq 中元素的字符串表示合并为字符串,以分隔符连接 |
| 19 | len(string) - 返回字符串长度 |
| 20 | ljust(width[, fillchar]) - 返回原字符串左对齐、填充至宽度 width 的字符串 |
| 21 | lower() - 将字符串中大写字母转为小写 |
| 22 | lstrip() - 移除字符串前导空白字符 |
| 23 | maketrans() - 返回供 translate 函数使用的转换表 |
| 24 | max(str) - 返回字符串 str 中最大字母字符 |
| 25 | min(str) - 返回字符串 str 中最小字母字符 |
| 26 | replace(old, new [, max]) - 将字符串中所有 old 替换为 new,或最多 max 次 |
| 27 | rfind(str, beg=0, end=len(string)) - 同 find(),但从后向前搜索 |
| 28 | rindex(str, beg=0, end=len(string)) - 同 index(),但从后向前搜索 |
| 29 | rjust(width[, fillchar]) - 返回原字符串右对齐、填充至宽度 width 的字符串 |
| 30 | rstrip() - 移除字符串尾部空白字符 |
| 31 | split(str="", num=string.count(str)) - 按分隔符 str 分割字符串(默认空格),返回子串列表;最多分割 num 个子串 |
| 32 | splitlines(num=string.count('\n')) - 在所有(或 num 个) NEWLINE 处分割字符串,返回移除 NEWLINE 的各行列表 |
| 33 | startswith(str, beg=0, end=len(string)) - 判断字符串/子串是否以子串 str 开头 |
| 34 | strip([chars]) - 同时执行 lstrip() 和 rstrip() |
| 35 | swapcase() - 反转字符串中所有字母大小写 |
| 36 | title() - 返回"标题化"版本,所有单词首字母大写、其余小写 |
| 37 | translate(table, deletechars="") - 按转换表 str(256 字符)转换字符串,移除 del 字符串中的字符 |
| 38 | upper() - 将字符串中小写字母转为大写 |
| 39 | zfill(width) - 返回原字符串左侧填充零至宽度 width,用于数字,zfill() 保留符号(少一零) |
| 40 | isdecimal() - Unicode 字符串仅含十进制字符返回真,否则假 |
Python
- 掌握 C# 字符串:基础、操作与进阶技巧完全指南
- 精通Python运算符:全面指南
- 精通 Python 字典:创建、操作与进阶技巧
- Python 字符串操作完全指南:替换、连接、分割、反转、大小写转换
- Python strip() 方法完全指南:去除首尾空白与自定义字符实战
- Python str.count() 完全指南:统计字符与子串出现次数实战
- Python format() 字符串格式化完全指南:占位符、格式化规范、类与字典应用
- Python len() 函数实战指南:测量字符串、列表、元组、字典等对象长度
- Python 字符串 find() 方法完全指南:语法、参数、替代方案与计数技巧
- 精通 Python enumerate():为列表、元组、字符串、字典带索引循环
- 精通 Java 字符串:创建、方法与最佳实践
- 精通 Java 枚举字符串表示:默认行为、toString 重写与进阶模式