几个Python字符串方法浅析

字符串提供了一系列的方法去实现复杂的文本处理任务。方法就是与特定的对象关联在一起的函数。方法调用同时进行了两次操作:

第一次:属性读取——具有object.attribute格式的表达式可以理解为“读取object对象的属性attribute的值”;

第二次:函数调用表达式——具有函数(参数)格式的表达式意味着“调用函数代码,传递零或者更多用逗号隔开的参数对象,最后返回函数的返回值”。

方法调用表达式对象,方法(参数)从左至右运行,也就是说Python首先读取对象方法,然后调用它,传递参数。如果一个方法计算出一个结果,它将会作为整个方法调用表达式的结果被返回。

这里,着重介绍这样几个方法:find、join、replace、split。

1、find方法:

使用方法: S.find( sub, [ , start, [ , end]])

注:对于上面使用格式的说明:[]表示参数可选,未用此[]包含的参数为必须指定的参数。

find方法返回在子字符串出现处的偏移(默认从前向后开始搜索)或者未找到时返回-1。

>>> s = 'xxxxspamxxxxspamxxxx'
>>> where = s.find('spam')
>>> where
4

现在,如果我们试图去实现这样一个替换操作:将s字符串的spam字符串替换为eggs。

首先,如果仅仅是替换第一个spam,那么可以这样操作:

>>> s1 = s[:where] + 'eggs' + s[(where+4):]
>>> s1
'xxxxeggsxxxxspamxxxx'
>>>

但是假如我们希望完全替换所有的spam为eggs,那么,我们有如下的代码更改:

>>> s = 'xxxxspamxxxxspamxxxx'
>>> where = s.find('spam')
>>> while where != -1 :
... s = s[:where] + 'eggs' + s[(where+4):]
... where = s.find('spam')
...
>>> s
'xxxxeggsxxxxeggsxxxx'
>>> 

这样的效率很低,代码量也很大,因此,我们可以使用replace方法:

2、replace方法:

使用方法:S.replace(old, new, [, maxsplit])

该方法的第一个参数是原始子字符串(任意长度),替换原始子字符串的字符串(任意长度),之后进行全局搜索并替换。

>>> s = 'xxxxspamxxxxspamxxxx'
>>> s.replace('spam', 'eggs')
'xxxxeggsxxxxeggsxxxx'
>>> s
'xxxxspamxxxxspamxxxx'
>>> 

在这里,有几个点需要说明:

(1)replace方法每次返回的字符串是一个新的字符串对象。由于字符串是不可变的,因此,每一种方法并不是真正在原处修改了字符串。

(2)我们可以通过控制第三个变量来实现只替换一次的目的:

>>> s.replace('spam', 'eggs', 1)
'xxxxeggsxxxxspamxxxx'
>>> 

3、join方法:

使用方法:S.join(seq)

join方法常常将字符串列表合并成一个字符串。

>>> s = 'spamy'
>>> l = list(s)
>>> l
['s', 'p', 'a', 'm', 'y']
>>> s
'spamy'
>>> 

如上所示,list可以将字符串分割成单字符列表,但是原字符串并未修改。join负责将列表字符合并成一个字符串。

>>> l
['s', 'p', 'a', 'm', 'y']
>>> s
'spamy'
>>> ''.join(l)
'spamy'
>>> '+'.join(l)
's+p+a+m+y'
>>> t = '***'
>>> t.join(l)
's***p***a***m***y'
>>> 

从这里,我们可以得出这样几个结论:

(1)join会将调用该方法的字符串(我们称之为分隔符)插入至合并字符串;

>>> '%'.join(['d','s','ld','f'])
'd%s%ld%f'

(2)通过上面的join实例,我们可以看出:分隔符的个数始终等于列表元素个数-1。

(3)合并后的字符串会存储在内存中,而不会修改列表对象。

4、split方法:

使用方法:S.split([seq, [, maxsplit]])

split方法分割字符串并将子字符串存储在列表(list)对象中。

>>> x = 'iperf -u -c 192.168.1.1'
>>> x.split()
['iperf', '-u', '-c', '192.168.1.1']
>>> x = 'iperf -u -c 192.168.1.1'
>>> x.split()
['iperf', '-u', '-c', '192.168.1.1']
>>> 

上面是split函数的默认使用情景,通过这些实例,我们可以看出,split默认方法的作用是以空格将字符串分割开来,而不管空格数是多少个(大于等于1个)。当然,通过上面的实例,我们可以看出,split默认方法常常用作命令行分析工具。

现在,对于可选参数,我们进行相关分析:

>>> s = 'www.baidu.com'
>>> s.split()
['www.baidu.com']
>>> s.split(',')
['www.baidu.com']
>>> s.split('.')
['www', 'baidu', 'com']

通过上面的代码,可选参数即为指定分隔符,用以将字符串分割的标志。另外,split默认方法是不能分离无空格字符串的。

现在,我们进行另一种尝试:

>>> s = r'www.baidu.com/zhidao/cpp/format/2015-1-5-22-10'
>>> s
'www.baidu.com/zhidao/cpp/format/2015-1-5-22-10'
>>> s.split()
['www.baidu.com/zhidao/cpp/format/2015-1-5-22-10']
>>> s.split('.')
['www', 'baidu', 'com/zhidao/cpp/format/2015-1-5-22-10']
>>> s.split(r'/')
['www.baidu.com', 'zhidao', 'cpp', 'format', '2015-1-5-22-10']
>>> s.split('-')
['www.baidu.com/zhidao/cpp/format/2015', '1', '5', '22', '10']
>>> s.split(['.','//','-'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: expected a character buffer object

对于上面的一个具有多个有意义分隔符的字符串时,我们如果试图同时获取所希望的数据,那么,通过在可选参数中设定list对象,是不行的。

很多时候,要得到多个分隔符分割的结果,使用正则表达式无疑是更好的选择。

时间: 2024-08-03 05:19:54

几个Python字符串方法浅析的相关文章

浅谈python字符串方法的简单使用_python

学习python字符串方法的使用,对书中列举的每种方法都做一个试用,将结果记录,方便以后查询. (1) s.capitalize() ;功能:返回字符串的的副本,并将首字母大写.使用如下: >>> s = 'wwwwww' >>> scap = s.capitalize() >>> scap 'Wwwwww' (2)s.center(width,char); 功能:返回将s字符串放在中间的一个长度为width的字符串,默认其他部分用空格填充,否则使用c

python字符串排序方法_python

本文以实例形式简述了Python实现字符串排序的方法,是Python程序设计中一个非常实用的技巧.分享给大家供大家参考之用.具体方法如下: 一般情况下,python中对一个字符串排序相当麻烦: 一.python中的字符串类型是不允许直接改变元素的.必须先把要排序的字符串放在容器里,如list. 二.python中的list容器的sort()函数没返回值. 所以在python中对字符串排序往往需要好几行代码. 具体实现方法如下: >>> s = "string" >

Python字符串逐字符或逐词反转方法

  这篇文章主要介绍了Python字符串逐字符或逐词反转方法,本文对逐字符或逐词分别给出两种方法,需要的朋友可以参考下 目的 把字符串逐字符或逐词反转过来,这个蛮有意思的. 方法 先看逐字符反转吧,第一种设置切片的步长为-1 代码如下: revchars=astring[::-1] In [65]: x='abcd' In [66]: x[::-1] Out[66]: 'dcba' 第二种做法是采用reversed(),注意它返回的是一个迭代器,可以用于循环或传递给其它的"累加器",不

Python字符串处理之count()方法的使用

  这篇文章主要介绍了Python字符串处理之count()方法的使用,是Python入门的基础知识,需要的朋友可以参考下 count()方法返回出现在范围内串子数range [start, end].可选参数的start和end都解释为片符号. 语法 以下是count()方法的语法: ? 1 str.count(sub, start= 0,end=len(string)) 参数 sub -- 这是子串用来进行搜索. start -- 搜索从这一索引.第一个字符从0开始的索引.默认情况下搜索从0

python字符串替换的2种方法_python

python 字符串替换 是python 操作字符串的时候经常会碰到的问题,这里简单介绍下字符串替换方法. python 字符串替换可以用2种方法实现: 1是用字符串本身的方法. 2用正则来替换字符串 下面用个例子来实验下: a = 'hello word' 把a字符串里的word替换为python 1.用字符串本身的replace方法 复制代码 代码如下: a.replace('word','python') 输出的结果是hello python 2.用正则表达式来完成替换: 复制代码 代码如

Python常见格式化字符串方法小结【百分号与format方法】_python

本文实例讲述了Python常见格式化字符串方法.分享给大家供大家参考,具体如下: [方式一]百分号(%)方式,类C的printf,需要分别不同类型. 1.匿名tuple.(推荐在参数少时用) >>> '姓名:%s, 年龄:%d' % ('walker', 99) '姓名:walker, 年龄:99' 2.命名dict,字典的key可以重用. >>> '姓名:%(name)s, 年龄:%(age)d, 工龄:%(age)d' % {'name':'walker', 'ag

Python字符串详细介绍

  这篇文章主要介绍了Python字符串详解,本文讲解了字符串相关知识.字符串的一些特性.原始字符串.unicode字符串.字符串的常用操作方法.内建函数列表等内容,需要的朋友可以参考下 简介 字符串序列用于表示和存储文本,python中字符串是不可变的,一旦声明,不能改变 通常由单引号(' ),双引号(" ),三引号(''' """)包围 其中三引号可以由多行组成,编写多行文本的快捷语法,常用语文档字符串,在文件的特定地点,被当做注释.便捷的多行注释 Python

Python yield 使用浅析

  这篇文章主要介绍了Python yield 使用浅析,本文给出了多个使用实例来分析yield的使用方法,需要的朋友可以参考下 初学 Python 的开发者经常会发现很多 Python 函数中用到了 yield 关键字,然而,带有 yield 的函数执行流程却和普通函数不一样,yield 到底用来做什么,为什么要设计 yield ?本文将由浅入深地讲解 yield 的概念和用法,帮助读者体会 Python 里 yield 简单而强大的功能. 您可能听说过,带有 yield 的函数在 Pytho

Python字符串(Str)详解

字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串. 创建字符串很简单,只要为变量分配一个值即可 字符串的格式 b = "hello itcast.cn" # 或者 b = 'hello itcast.cn' 双引号或者单引号中的数据,就是字符串 字符串连接的方法 直接通过加号(+)操作符连接 a = "str1" b = "str2" c = a + b print("a:%s" %