杰瑞科技汇

Python 中 substring 如何实现?

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

Python 中 substring 如何实现?-图1
(图片来源网络,侵删)

下面我将详细解释 Python 中获取子字符串(substring)的各种方法。

核心方法:字符串切片

字符串切片是 Python 中最常用、最 Pythonic 的方式,其基本语法是:

string[start:stop:step]
  • string: 你要操作的原始字符串。
  • start (可选): 起始索引(包含),如果省略,默认为 0
  • stop (可选): 结束索引(不包含),如果省略,默认为字符串的末尾。
  • step (可选): 步长,如果省略,默认为 1

切片详解与示例

基本切片:获取从 startstop-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

使用步长

步长可以让你跳过某些字符。

Python 中 substring 如何实现?-图2
(图片来源网络,侵删)
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

特殊情况:startstop 超出范围

Python 的切片非常友好,当 startstop 超出字符串的有效索引范围时,它不会抛出 IndexError,而是会自动调整到边界。

s = "Hello"
# start 超出范围,会返回空字符串
print(s[10:])  # 输出: (空字符串)
# stop 超出范围,会截取到字符串末尾
print(s[:10])  # 输出: Hello

其他相关方法

虽然切片是主要方法,但了解其他一些字符串方法也很有用。

str.find()str.index() + 切片

当你需要根据某个子串的位置来切片时,这两个方法很有用。

Python 中 substring 如何实现?-图3
(图片来源网络,侵删)
  • 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 的切片吧! 它功能强大、语法简洁,是处理字符串的利器。

分享:
扫描分享到社交APP
上一篇
下一篇