字符串方法

字符串方法是用于操作字符串的一系列函数或操作,它们允许程序员执行如查找、替换、截取、连接、比较和转换字符串等操作。字符串方法是编程中非常基础且常用的功能,几乎所有编程语言都提供了丰富的字符串方法来支持对字符串的处理。

字符串方法有很多,可以通过

help(str)

查看。字符串方法有很多,这里介绍几个比较常见的。

介绍字符串

在介绍之前呢,可以介绍一个小方法,ctrl + "p"是函数参数提示,可以提示我们使用的字符串方法如何使用,或者将鼠标放在括号内。如:

这样在我们记不太清除字符串用法时来提示我们。下面我们来正式介绍一些字符串方法:

索引index() 与 find()

index与find都是找到符合标准的第一个位置值、索引值、下标值。但是find没找到字符串时返回的结果是-1,不会报错。

说明:

#说明:查找字符串位置时,从左到右位置字符编号从0开始依次排序
#位置取值:[start , end) 左闭右开

index:

strs = " 你好-朋友 happy goodday"
#代码含义:("x",y)从第y个位置,查找第一个x所在的位置
print(strs.index("a",0))  #从第0个位置检索
print(strs.index("a",9))  #从第9个位置检索

--------------------------
结果显示:
8
18

 find:

strs = " 你好-朋友 happy goodday"
#代码含义:("x",y)从第y个位置,查找第一个x所在的位置

print(strs.find("a",5))
print(strs.find("a",30))

-------------------------
输出结果:
8
-1

分割split()

split() 方法是一个非常常用的字符串方法,它用于将字符串分割成列表。这个方法通过指定的分隔符来分割字符串,并返回分割后的字符串列表。如果字符串中没有找到分隔符,则整个字符串作为列表的一个元素返回。

strs = " 你好-朋友 happy goodday"

#split 分割作用 结果返回的是一个列表
#.split(sep,maxsplit):sep确定分隔符号,maxsplit为最大切分次数

print(strs.split("a",1))
print(strs.split("a",2))
print(strs.split("a",6))  #字符串中,a仅有两个

---------------------------------
输出结果:
[' 你好-朋友 h', 'ppy goodday']
[' 你好-朋友 h', 'ppy goodd', 'y']
[' 你好-朋友 h', 'ppy goodd', 'y']

那我们只能在从左往右数的第1个分隔符分割吗?我只想在右边的那个"a"分割怎么办呢?

于是又引入"r","l"的作用,一般可以代指右边和左边,比如:split()写成rsplit()就代表从右边往左边找到的第一个分隔符开始分割:

strs = " 你好-朋友 happy goodday"

print(strs.rsplit("a",1))

----------------------------------
输出结果:
[' 你好-朋友 happy goodd', 'y']  #从右边的第一个"a"开始分割

移除strip()

在Python中,strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符\n\r\t等)。如果不指定字符,strip()将移除字符串两端的所有空白字符(包括空格、换行\n、制表符\t、回车\r等)。

strs = " 你好-朋友 happy goodday "

#.strip() 去除左右空格
print(strs.strip())  #去除两边
print(strs.rstrip()) #去除右边
print(strs.lstrip()) #去除左边

---------------------------------------
你好-朋友 happy goodday
 你好-朋友 happy goodday
你好-朋友 happy goodday 

替换replace()

在Python中,replace() 方法用于替换字符串中的某些部分。这个方法会搜索字符串,查找所有匹配项,并将它们替换为指定的内容。与 strip() 方法不同,replace() 方法会返回一个新的字符串,原字符串不会被修改(因为Python中的字符串是不可变的)。

strs = " 你好-朋友 happy goodday "

#replace(old,new):把旧的字符串替换成新的字符串
print(strs.replace("你","you"))  #"你"替换成"you"
print(strs.replace("a","t"))     #"a"替换成"t"
print(strs.replace("you","他"))  #旧字符串中查找不到"you",返回原字符串

------------------------------------
输出结果:
 you好-朋友 happy goodday 
 你好-朋友 htppy gooddty 
 你好-朋友 happy goodday 

计数count()

在Python中,count() 方法的作用取决于它被调用的对象类型。它主要用于计算某个元素在序列(如列表、元组、字符串)中出现的次数。

strs = " 你好-朋友 happy goodday "

# count() 计数
print(strs.count("a"))  #计算字符串中,"a"的个数
print(strs.count("好"))  #计算字符串中,"好"的个数

----------------------------------
输出结果:
2
1

编码encode()

在Python中,encode() 方法主要用于将字符串(str)对象转换成字节串(bytes)对象。这个过程涉及到指定一个编码方式(如 'utf-8', 'gbk' 等),因为字符串在计算机内部是以字节的形式存储的,而不同的编码方式决定了如何将字符映射到字节上。

utf-8

是一种全球通用的多字节编码方式,可以支持几乎所有语言的字符,包括各种文字和符号,具有更广泛的适用性。UTF-8编码不仅支持中文,还支持英文、日文、韩文、拉丁文、希腊语等多种语言的字符,因此在国际化应用中更为常用。采用变长编码,一个字符的编码长度可为1到4个字节不等。

gbk

主要用于简体中文字符的编码,它是基于GB2312标准扩展而来,能够包含全部中文汉字及符号,同时也包括部分日文和韩文字符。GBK编码的字符集范围相对较为局限,主要面向中文环境。采用双字节编码,即每个字符占用2个字节。

因为编码长度不一样,同样的字节形式编码结果会产生不同,这也就是有时用软件打开另一个文档的时候会出现乱码的原因。比如:"你好"

#编码encode()
print("你好".encode())   #utf-8编码方式
print(b'\xe4\xbd\xa0\xe5\xa5\xbd'.decode("gbk"))  #gbk编码

-------------------------------
输出结果:
b'\xe4\xbd\xa0\xe5\xa5\xbd'
浣犲ソ

    >>>在utf-8编码方式中,一个汉字占三个字节
    >>>而在gbk中,一个汉字占两个字节,所以以gbk返回值的时候不是"你好"

"is判断类"

这一类有许多字符串方法,比如:

# isascii() 检查给定的参数是否为ASCII码字符
print("a".isascii())

# isdigit()  判断是不是整数数字
print("2".isdigit(),"2.5".isdigit())

# isnumeric() 判断是不是数字
print("13".isnumeric(),"方世恩".isnumeric())

# islower()  判断是不是小写
print("a".islower(),"R".islower())
# isupper()  判断是不是大写
print("b".isupper(),"D".isupper())

--------------------------------------
输出结果:
True
True False
True False
True False
False True

大小写转换upper与lower

print("strs".upper())    #小写字母转换为大写
print("ACCCCC".lower())    #大写字母转换为小写

-------------------------------
输出结果:
STRS
accccc

切片

在Python中,切片(Slicing)是一种强大的功能,它允许你从一个序列(比如列表、元组、字符串等)中选取一部分元素。切片操作通过指定序列的起始和结束索引(以及可选的步长)来完成。

sequence[start:end:step]

#sequence 是要进行切片操作的序列(比如列表、元组或字符串)。
#start 是切片的起始索引(包含),如果省略,则默认为序列的开始(索引0)。
#end 是切片的结束索引(不包含),如果省略,则默认为序列的结束。
#step 是切片时的步长,即选取元素的间隔。如果省略,则默认为1。

对以下字符串进行切片:

strs = " 你好-朋友 happy goodday "

单切

首先,我们如何从这串字符串中切出一个字符来呢?

strs = " 你好-朋友 happy goodday "

    #>>>切出一个字符
print(strs[0])    #前面提过:字符串中各字符位置从左往右从0开始逐一编号
print(strs[5])

------------------------------
输出结果:
         #此处有个空格
好

上述编码中,我们从字符串中将" ","好"两个字符给切片出来了。可是,日常切片中肯定不仅仅只切片一个字符,那么我们想切两个、三个甚至更多怎么处理呢?

strs = " 你好-朋友 happy goodday "

#切出多个
print(strs[0:5])    #[start:end)左闭右开。第0位开始切,第5位结束
print(strs[3:8])    #第3位开始切,第8位结束

----------------------------
输出结果:
 你好-朋
-朋友 h

隔步切

到这里我们了解了怎么从字符串中切下来一小串字符,我们在精进一些,如何只将字符串中的"好","朋"切片下来呢?又该怎么样能将整个字符串都切下来呢?

strs = " 你好-朋友 happy goodday "

    #>>>隔字切片
print(strs[2:5:2])  #[2:5:2]中表示在位置[2:5)范围内,每两个步长切一次

    #>>>切整个字符串
print(strs[::1])    #不设置位置范围

---------------------------
输出结果:
好朋
 你好-朋友 happy goodday 

逆着切

到这我们对切片都有了比较深刻的了解,如何切片、如何切自己的目标,那么我们再来想个有意思的切法:我想将字符串倒过来切!怎么处理呢?

#>>我们说过从左到右的位置编号,从0开始依次编号
#>>那我们逆着来编号发生改变:从右往左编号从-1开始依次编号

strs = " 你好-朋友 happy goodday "

print(strs[-2])    #加个"-",从右向左切片
print(strs[-5:-1]) #选中[-5,-1)位置切片,依然遵循[)左闭右开

print(strs[::-1])  #逆着每个步长切一次(全切)
print(strs[::-2])  #逆着每两个步长切一次

--------------------------------
输出结果:
y
dday
 yaddoog yppah 友朋-好你 
 ado pa 朋好 

总结

以上就是一些常用的字符串方法,还有有趣的不同的切片方法。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐