热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python字符串方法教程如何在Python字符串上使用find()和replace()函数

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_patternthis_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人获得开发工作。开始吧


推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文整理了Java中java.lang.NoSuchMethodError.getMessage()方法的一些代码示例,展示了NoSuchMethodErr ... [详细]
  • 包含A-Z的字母的消息通过以下规则编码:'A'-1'B'-2'Z'-26给定一个包含数字的编码消息,请确定解 ... [详细]
  • Birthdate ... [详细]
  • 两个N位数a和b相乘,手算的话一般是a的末位分别乘以b的末位到首位,然后a的倒数第二位分别乘以b的末位到首位,直到a的首位分别乘以b的末位到首位,最后按位数相加。这个过程的时间复杂度是O(n2)的。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 显示中文星期几
    显示中文星期几引自:第一种方法:直接翻译,最笨、最容易想到的方法。Code获得中文星期名称 ... [详细]
author-avatar
倩倩
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有