Skip to content

Python3 字符串查找与替换

本教程将引导你学习 Python3 中常用的字符串查找和替换方法,这些方法对于处理文本数据至关重要。我们会用简单易懂的例子,帮助你快速掌握这些技能。

1. 统计子字符串出现次数:count()

count() 方法用于统计一个字符串中,某个子字符串出现的次数。 它的基本语法如下:

python
string.count(sub, start=0, end=len(string))
  • sub: 需要统计的子字符串。
  • start: 可选参数,指定搜索的起始位置,默认为 0(字符串的开头)。
  • end: 可选参数,指定搜索的结束位置,默认为字符串的长度。

示例:

python
s = "she sells sea shells"
print(s.count("she"))  # 输出: 2
print(s.count("she", 5)) # 输出: 1  从索引5开始查找
print(s.count("she", 5, 10)) # 输出: 0  从索引5到10之间查找
print(s.count("she", 5, 17)) # 输出: 1  从索引5到17之间查找

注意:非重叠计数

count() 方法计算的是非重叠的子字符串出现次数。 这意味着,如果子字符串之间有重叠部分,重叠的部分不会被重复计算。

python
s = "valhala alala"
print(s.count("al"))   # 输出: 4
print(s.count("ala"))  # 输出: 2

在上面的例子中,"ala" 只被计数了两次,虽然 "alala" 中包含多个 "ala",但是它们之间存在重叠。

2. 查找子字符串:find()

find() 方法用于查找子字符串在字符串中第一次出现的位置。

python
string.find(sub, start=0, end=len(string))
  • sub: 需要查找的子字符串。
  • start: 可选参数,指定搜索的起始位置,默认为 0。
  • end: 可选参数,指定搜索的结束位置,默认为字符串的长度。

如果找到了子字符串,find() 方法会返回子字符串第一次出现的索引。 如果没有找到,则返回 -1

示例:

python
s = "she sells sea shells"
print(s.find("she"))      # 输出: 0
print(s.find("she", 5))   # 输出: 14
print(s.find("see"))      # 输出: -1
print(s.find("she", 5, 10)) # 输出: -1
print(s.find("she", 5, 17)) # 输出: 14

3. 从右向左查找子字符串:rfind()

rfind() 方法与 find() 方法类似,不同之处在于 rfind() 方法是从字符串的右侧开始查找子字符串。

python
string.rfind(sub, start=0, end=len(string))
  • sub: 需要查找的子字符串。
  • start: 可选参数,指定搜索的起始位置,默认为 0。
  • end: 可选参数,指定搜索的结束位置,默认为字符串的长度。

如果找到了子字符串,rfind() 方法会返回子字符串最后一次出现的索引。 如果没有找到,则返回 -1

示例:

python
s = "she sells sea shells"
print(s.rfind("she"))      # 输出: 14
print(s.rfind("she", 0, 12)) # 输出: 0
print(s.rfind("see"))      # 输出: -1
print(s.rfind("she", 5))   # 输出: 14

4. index() 方法:查找子字符串,找不到则抛出异常

index() 方法与 find() 方法的功能相似,都是用于查找子字符串在字符串中的位置。 但它们之间有一个重要的区别: 如果 index() 方法没有找到子字符串,它会抛出一个 ValueError 异常,而不是像 find() 方法那样返回 -1

python
string.index(sub, start=0, end=len(string))
  • sub: 需要查找的子字符串。
  • start: 可选参数,指定搜索的起始位置,默认为 0。
  • end: 可选参数,指定搜索的结束位置,默认为字符串的长度。

示例:

python
s = "she sells sea shells"
print(s.index("she"))      # 输出: 0
print(s.index("she", 5))   # 输出: 14
try:
    print(s.index("see"))  # 抛出 ValueError 异常
except ValueError:
    print("子字符串未找到") # 输出:子字符串未找到
print(s.index("she", 5, 10)) # 抛出 ValueError 异常
print(s.index("she", 5, 17)) # 输出: 14

5. rindex() 方法:从右向左查找,找不到则抛出异常

rindex() 方法与 rfind() 方法类似, 从字符串的右侧开始查找子字符串。 区别在于,如果 rindex() 方法没有找到子字符串,它会抛出一个 ValueError 异常。

python
string.rindex(sub, start=0, end=len(string))
  • sub: 需要查找的子字符串。
  • start: 可选参数,指定搜索的起始位置,默认为 0。
  • end: 可选参数,指定搜索的结束位置,默认为字符串的长度。

示例:

python
s = "she sells sea shells"
print(s.rindex("she"))      # 输出: 14
print(s.rindex("she", 0, 12)) # 输出: 0

try:
    print(s.rindex("see"))  # 抛出 ValueError 异常
except ValueError:
    print("子字符串未找到") # 输出:子字符串未找到

print(s.rindex("she", 5))   # 输出: 14

6. 替换子字符串:replace()

replace() 方法用于将字符串中的指定子字符串替换为新的子字符串。

python
string.replace(old, new, count=-1)
  • old: 需要被替换的子字符串。
  • new: 用于替换的新子字符串。
  • count: 可选参数,指定最多替换的次数。 默认情况下,count=-1,表示替换所有出现的子字符串。

示例:

python
s = "Oh Python! Oh"
print(s.replace("Oh", "Hi"))     # 输出: Hi Python! Hi
print(s.replace("Oh", "Hi", 1))  # 输出: Hi Python! Oh
方法描述未找到子字符串时的行为
count()统计子字符串出现次数返回 0
find()查找子字符串第一次出现的位置返回 -1
rfind()从右向左查找子字符串最后一次出现的位置返回 -1
index()查找子字符串第一次出现的位置抛出 ValueError
rindex()从右向左查找子字符串最后一次出现的位置抛出 ValueError
replace()替换字符串中的子字符串返回原始字符串