在 Python 中,并没有名为 substring 的内置函数或方法,Python 提供了非常强大且简洁的字符串切片(Slicing)机制,这比许多其他语言中的 substring 功能更灵活。

下面我将详细解释 Python 中获取子字符串(substring)的各种方法。
核心方法:字符串切片
字符串切片是 Python 中最常用、最 Pythonic 的方式,其基本语法是:
string[start:stop:step]
string: 你要操作的原始字符串。start(可选): 起始索引(包含),如果省略,默认为0。stop(可选): 结束索引(不包含),如果省略,默认为字符串的末尾。step(可选): 步长,如果省略,默认为1。
切片详解与示例
基本切片:获取从 start 到 stop-1 的子串
s = "Hello, World!" # 获取索引 0 到 4 的字符 (不包含 5) # 'H'是0, 'e'是1, 'l'是2, 'l'是3, 'o'是4 print(s[0:5]) # 输出: Hello # 如果从 0 开始,可以省略 0 print(s[:5]) # 输出: Hello # 如果切片到末尾,可以省略 stop print(s[7:]) # 输出: World!
负索引
Python 支持负索引,-1 表示最后一个字符,-2 表示倒数第二个字符,以此类推。
s = "Hello, World!" # 获取最后 5 个字符 # s[-5:] 表示从倒数第 5 个字符开始,到字符串末尾 print(s[-5:]) # 输出: rld! # 获取从开头到倒数第 7 个字符 (不包含) # s[:-7] 表示从索引 0 开始,到倒数第 7 个字符之前结束 print(s[:-7]) # 输出: Hello
使用步长
步长可以让你跳过某些字符。

s = "0123456789" # 从索引 1 开始,到索引 8 结束,每隔一个字符取一个 (步长为 2) print(s[1:8:2]) # 输出: 1357 # 步长为 -1,可以实现字符串反转 print(s[::-1]) # 输出: 9876543210 # 从索引 8 开始,到索引 1 结束,每隔一个字符取一个 (步长为 -2) print(s[8:1:-2]) # 输出: 963
获取单个字符
如果你想获取单个字符,可以直接使用索引,这可以看作是切片的一种特例(切片长度为 1)。
s = "Hello" # 获取索引为 1 的字符 print(s[1]) # 输出: e
特殊情况:start 或 stop 超出范围
Python 的切片非常友好,当 start 或 stop 超出字符串的有效索引范围时,它不会抛出 IndexError,而是会自动调整到边界。
s = "Hello" # start 超出范围,会返回空字符串 print(s[10:]) # 输出: (空字符串) # stop 超出范围,会截取到字符串末尾 print(s[:10]) # 输出: Hello
其他相关方法
虽然切片是主要方法,但了解其他一些字符串方法也很有用。
str.find() 或 str.index() + 切片
当你需要根据某个子串的位置来切片时,这两个方法很有用。

str.find(sub): 查找子串sub的起始索引,如果找不到,返回-1。str.index(sub): 查找子串sub的起始索引,如果找不到,抛出ValueError。
s = "The quick brown fox jumps over the lazy dog."
# 找到 "brown" 的起始位置
index_brown = s.find("brown")
print(f"Index of 'brown': {index_brown}") # 输出: Index of 'brown': 10
# 使用切片获取 "brown" 这个词
print(s[index_brown : index_brown + 5]) # 输出: brown
# 找到 "dog" 的起始位置
index_dog = s.find("dog")
print(f"Index of 'dog': {index_dog}") # 输出: Index of 'dog': 40
# 获取从 "dog" 开始到末尾的子串
print(s[index_dog:]) # 输出: dog.
str.split() + 列表索引
如果你想根据分隔符将字符串分割成多个部分,然后取其中一部分,split() 很方便。
s = "apple,banana,cherry,date"
# 按逗号分割成一个列表
fruits = s.split(',')
print(fruits) # 输出: ['apple', 'banana', 'cherry', 'date']
# 获取第二个水果 (索引为 1)
print(fruits[1]) # 输出: banana
# 获取最后一个水果
print(fruits[-1]) # 输出: date
| 你的需求 | 推荐的 Python 方法 | 示例 (s = "Hello, World!") |
|---|---|---|
| 从开头到某个位置 | s[:stop] |
s[:5] -> "Hello" |
| 从某个位置到末尾 | s[start:] |
s[7:] -> "World!" |
| 获取中间一段 | s[start:stop] |
s[7:12] -> "World" |
| 获取最后 N 个字符 | s[-N:] |
s[-6:] -> "World!" |
| 反转字符串 | s[::-1] |
s[::-1] -> "!dlroW ,olleH" |
| 切片 | s.find() + 切片 |
s.find("World") -> 7, s[7:12] |
| 按分隔符分割后取值 | s.split() + 索引 |
s.split(',')[0] -> "Hello" |
忘记 substring 这个概念,拥抱 Python 的切片吧! 它功能强大、语法简洁,是处理字符串的利器。
