Python字符串方法教程-如何在Python字符串上使用find()和replace()函数-在Python中处理字符串时,你可能需要在字符串中搜索一个模式,甚至用另一个子串替换
在 Python 中处理字符串时,你可能需要在字符串中搜索一个模式,甚至用另一个子串替换字符串的一部分。
Python 有有用的字符串方法find()
和replace()
,帮助我们执行这些字符串处理任务。
在本教程中,我们将通过示例代码了解这两种字符串方法。
Python 字符串的不可变性
Python 中的字符串是_不可变_的。因此,我们不能_在原地_修改字符串。
字符串是遵循零索引的Python可迭代项。长度为n
的字符串的有效索引是0,1,2,..,(n-1)
。
我们也可以使用负索引,最后一个元素的索引是-1
,倒数第二个元素的索引是-2
,以此类推。
例如,我们有my_string
,其中存放着字符串"writer"
。让我们尝试通过设置最后一个字符为"s"
,将其改为"writes"
。
my_string = "writer"
让我们试着把最后一个字符分配给字母"s"
,如下图所示。通过负数索引,我们知道my_string
中最后一个字符的索引是-1
。
my_string[-1]="s"
# Output
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in ()
1 my_string = "writer"
----> 2 my_string[-1]="s"
TypeError: 'str' object does not support item assignment
如上面的代码片段所示,我们得到一个TypeError
。这是因为字符串对象是_不可改变_的,而我们试图进行的赋值是无效的。
然而,我们可能经常需要修改字符串。而字符串方法可以帮助我们轻松地做到这一点。
字符串方法对_现有的_字符串进行操作,并_返回新的_修改的字符串。现有的字符串 _不会_被修改。
让我们到下一节来学习find()
和replace()
方法。
如何使用 find() 在 Python 字符串中搜索模式
你可以使用 Python 的find()
方法在一个字符串中搜索一个模式。一般的语法如下所示。
.find()
我们想要搜索的输入字符串是由占位符this_string
表示的。我们要搜索的模式是由占位符this_pattern
。
现在我们来解析一下上述语法。
find()
方法通过this_string
搜索this_pattern
的出现。
- 如果
this_pattern
存在,它将返回this_pattern
的_第一次_出现的起始索引。
- 如果
this_pattern
没有出现在this_string
中,它将返回-1
。
▶ 让我们看看一些例子。
Python find() 方法示例
让我们举一个例子,字符串"I enjoy coding in Python!"
。
my_string = "I enjoy coding in Python!"
my_string.find("Python")
# Output
18
在上面的例子中,我们尝试在"my_string"
中搜索"Python"
。find()
方法返回18
,即模式"Python"
的起始索引。
为了验证返回的索引是否正确,我们可以检查my_string[18]=="P"
是否评估为True
。
现在,我们将尝试搜索一个在我们的字符串中不存在的子串。
my_string.find("Javascript")
# Output
-1
在这个例子中,我们尝试搜索在我们的字符串中不存在的"Javascript"
。find()
方法已经返回了-1
,如前所述。
如何使用find()来搜索Python子串中的模式
我们也可以使用find()
方法在某个_子串_或字符串的_片断_中搜索模式,而不是整个字符串。
在这种情况下,find()
方法的调用形式如下。
.find(, ,)
这与之前讨论的语法工作非常相似。
唯一不同的是,对模式的搜索不是在整个字符串上。它只是在start_index:end_index
所指定的字符串的一个_片断_上。
如何使用 index() 来搜索 Python 字符串中的模式
要在一个字符串中搜索一个模式的出现,我们不妨使用index()
方法。该方法的调用采用如下所示的语法。
.index()
index()
方法的工作与find()
方法的工作非常相似。
- 如果
this_pattern
存在于this_string
中,index()
方法返回this_pattern
的_第一次_出现的起始索引。
- 然而,如果
this_pattern
在this_string
中没有找到,它就会产生一个ValueError
。
▶时间的例子。
Python index() 方法的例子
让我们使用前面例子中的字符串my_string = "I enjoy coding in Python!"
。
my_string.index("Python")
# Output
18
在这种情况下,输出与find()
方法的输出相同。
如果我们搜索一个在我们的字符串中不存在的子串,index()
方法会引发一个ValueError
。这在下面的代码片断中显示。
my_string.index("Javascript")
# Output
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
in ()
----> 1 my_string.index("Javascript")
ValueError: substring not found
在下一节中,我们将学习如何查找和替换字符串中的模式。
如何使用 replace() 来查找和替换 Python 字符串中的模式
如果你需要在一个字符串中寻找一个模式,并用另一个模式来替换它,你可以使用replace()
方法。一般的语法如下所示。
.replace(,)
我们现在来解析一下这个语法。
replace()
方法通过this_string
搜索this
模式。
- 如果
this
模式存在,它将返回一个新的字符串,其中 _所有_出现的this
模式被替换为由with_this
参数指定的模式。
- 如果
this
模式在this_string
中没有找到,返回的字符串与this_string
相同。
如果你想只替换一定数量的出现,而不是所有的模式出现呢?
在这种情况下,你可以在方法调用中添加一个_可选的_参数,指定你想替换多少个模式的出现。
.replace(,, n_occurrences)
在上面的语法中,n_occurrences
,确保在返回的字符串中只替换模式的第一个n
出现。
▶让我们看一些例子来了解replace()
函数是如何工作的。
Python replace()方法示例
现在让我们重新定义my_string
,如下所示。
I enjoy coding in C++.
C++ is easy to learn.
I've been coding in C++ for 2 years now.:)
这在下面的代码片断中显示。
my_string = "I enjoy coding in C++.\nC++ is easy to learn.\nI've been coding in C++ for 2 years now.:)"
现在让我们用"Python"
替换所有出现的"C++"
,像这样。
my_string.replace("C++","Python")
# Output
'I enjoy coding in Python.\nPython is easy to learn.\nI've been coding in Python for 2 years now.:)'
由于replace()
方法返回一个字符串,我们在输出中看到\n
字符。对于引入换行符的\n
,我们可以打印出字符串,如下图所示。
print(my_string.replace("C++","Python"))
# Output
I enjoy coding in Python.
Python is easy to learn.
I've been coding in Python for 2 years now.:)
在上面的例子中,我们看到所有出现的"C++"
都被替换成了"Python"
。
▶现在,我们也要使用额外的n_occurrences
参数。
下面的代码返回一个字符串,其中"C++"
的前两次出现被替换为"Python"
。
print(my_string.replace("C++","Python",2))
# Output
I enjoy coding in Python.
Python is easy to learn.
I've been coding in C++ for 2 years now.:)
下面的代码返回一个字符串,其中只有第一次出现的"C++"
被替换为"Python"
。
print(my_string.replace("C++","Python",1))
# Output
I enjoy coding in Python.
C++ is easy to learn.
I've been coding in C++ for 2 years now.:)
现在,我们尝试替换一个在my_string
中不存在的子串"Javascript"
。因此,返回的字符串与my_string
相同。
print(my_string.replace("Javascript","Python"))
# Output
I enjoy coding in C++.
C++ is easy to learn.
I've been coding in C++ for 2 years now.:)
总结
在本教程中,我们学到了以下内容。
- 如何使用
find()
和index()
方法在 Python 中搜索字符串,以及
- 如何使用
replace()
方法查找和替换模式或子串。
希望你喜欢这个教程。
很快就会在另一篇文章中见到大家。在那之前,祝大家学习愉快!
Bala Priya C
我阅读、写作和编码
如果这篇文章对你有帮助,请把它发到推特上。
免费学习代码。freeCodeCamp的开源课程已经帮助超过40,000人获得开发工作。开始吧