【Python入门学习】Python字符串相关操作“:查找、拼接、拆分、替换、判断等

一. 字符串(String)

字符串通俗的说就是一串字符,是用来存储和表现文本信息的。在Python程序中,如果我们把单个或多个字符用单/双引号包围起来,就可以表示一个字符串。(Python3.6以上就不区分单/双引号)

从严格意义上来说,Python中的 字符串是就是由零个或多个字符组成的不可变序列
序列中的元素包含一个从左到右的顺序——序列中的元素根据它们的相对位置进行存储和读取。其他类型的序列还包括列表和元组(其他篇章会进行详细介绍)。
Python字符串是一种字符序列,所以着它具备序列类型都支持的操作(其他篇章会详细介绍序列的操作):

# s为一个序列,t为一个序列,x代表元素
x in s  # 若s包含x,返回True,否则返回False
x not in s  # 若s包含x,返回False,否则返回True
s + t  # 连接两个序列
s * n  # s复制n次
s[i]   # s的索引第i项
s[i:j] # s切片从第i项到第j-1项
s[i:j:k]  #  s切片从第i项到第j-1项,间隔为k
len(s)  # s的长度
min(s)  # s的最小元素,通过ASCII码来比较大小
max(s)  # s的最大元素,数字的ASCII码从小到大依次增加,字母的ASCII码从A—Z—a—z依次增加,并且数字的ASCII码小于字母的ASCII码
s.index(x) # x的索引位置
s.count(x)  # s中出现x的总次数

#本段代码来源于Python猫 ,作者豌豆花下猫

除了一般的序列操作,字符串还有一些独有的操作方法
在这里插入图片描述
以下是最常用的方法代码示例:参考文章

二.字符串常用操作

1. 字符串查找操作

(1)find()
find() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果指定范围内如果包含指定索引值,返回的是索引值在字符串中的起始位置。如果不包含索引值,返回-1。该方法只适用于字符串。

# str.find(s, beg=0, end=len(string))
# s为指定检索的字符,beg开始索引,默认为0;end结束索引,默认为字符串的长度。

s = 'aabbccd'
print(s.find('b')) # 从位置0开始,查找在字符串里第一个出现的子串,返回该字符的索引位置2
>>>2
print(s.find('b', 4)) # 从位置4开始查找,查找不到,返回-1
>>>-1
print(s.find('bc',3, 4)) #从位置3开始查找,到位置4结束,查找不到(不包括end位置)返回-1
>>>-1
print(s.find('bc',3, 5)) #改变end位置,查到end-1位置,返回子字符串的第一个位置,返回3
>>>3

但是这个方法并不常用,因为它仅仅告诉你所查找内容的索引位置,而在通常情况下,那个位置并不是我们的目的。

(2)index()
Python index() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法,index()适用于序列类型。
index()方法和find()一样,它们的最大的区别只在于,当需要查找的str不在字符串中时,它们的返回值不同,find()返回 -1,而index()会报一个异常。

s = 'aabbccd'
print(s.find('hello')) #找不到子串,返回-1
>>>-1

print(s.index('hello')) #找不到子串,抛出异常
>>>Traceback (most recent call last):
   ValueError: substring not found

以上两个方法,只能用来满足最简单的查找需求。在日常使用中,我们常常要查找特定模式的内容,例如某种格式的日期字符串,这就得借助更强大的查找工具了。
re 模块就是这样的工具,正则表达式用来定制匹配规则,re 模块则提供了 match() 、find() 及 findall() 等方法,它们组合起来,可以实现复杂的查找功能。限于篇幅,今后再对这两大工具做详细介绍,这里有一个简单的例子:

import re
datepat = re.compile(r'd+/d+/d+')
text = 'Today is 4/11/2020. Tomorrow is 4/12/2020.'
datepat.findall(text)
>>> ['4/11/2020', '4/12/2020']

2. 拼接字符串
由于篇幅问题,关于字符串拼接问题,我另一篇文章进行详细的整理python字符串拼接的八种方式

3. 拆分字符串

  • split()方法
    split()方法通过指定分隔符对字符串进行切片,split() 方法可以将长字符串拆分成一个列表。如果参数 num 有指定值,则分隔 num+1 个子字符串,与jion()方法恰恰相反。
# str.split(str="", num=string.count(str)).
# str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
# num -- 分割次数。默认为 -1, 即分隔所有。

s = 'hello world'

# 不传参数时,默认分隔符为所有空字符
print(s.split()) 
>>>['hello', 'world']
s = 'hello world'
# 传入不存在的参数,不进行分割
print(s.split('-')) 
>>>['hello world']
#传入指定参数,拆分过程会消耗分隔符,所以拆分结果中不包含分隔符。
print(s.split('he')) 
>>>['', 'llo world']

字符串是不可变序列,所以字符串拆分过程是在拷贝的字符串上进行,并不会改变原有字符串。

split() 方法的第二个参数是一个数字,默认是缺省,缺省时全分隔,不为空时,用来指定拆分次数。

s = 'a-b-b-b-b'
# 默认为空,为空全分隔
print(s.split('-'))
>>>['a', 'b', 'b', 'b', 'b']
#不为空,指定分隔次数
print(s.split('-', 1))
>>>['a', 'b-b-b-b']

split() 方法是从左往右遍历,与之相对,rsplit() 方法是从右往左遍历。

s = 'a-b-b-b-b'
# rsplit从右往左开始遍历
print(s.rsplit('-',1))
>>>['a-b-b-b', 'b']
  • splitlines()方法
    splitlines() 按照行(’\r’, ‘\r\n’, \n’)分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。它接收一个参数 True 或 False ,分别决定换行符是否会被保留,默认值 False ,即不保留换行符。
str1 = 'ab c\n\nde fg\rkl\r\n'
print(str1.splitlines()) #不保留换行符
>>>['ab c', '', 'de fg', 'kl']
 
str2 = 'ab c\n\nde fg\rkl\r\n' #保留换行符
print(str2.splitlines(True))
>>>['ab c\n', '\n', 'de fg', 'kl']

补充知识:
'\r’是回车,前者使光标到行首,(carriage return)
'\n’是换行,后者使光标下移一格,(line feed)
“\r\n”是回车加换行,一般用在结尾

4.替换字符串
替换字符串包括如下场景:大小写替换、特定符号替换、自定义片段替等,要注意的是:字符串是不可变对象,以下操作并不会改变原有字符串。python中替换字符串的常用方法如下表所示:
在这里插入图片描述
5.判断字符串

判断字符串是否(只)包含某些字符内容,这类使用场景也很常见,例如在网站注册时,要求用户名只能包含英文字母和数字,那么,当校验输入内容时,就需要判断它是否只包含这些字符。其它常用的判断操作,详列如下:在这里插入图片描述

注意:字符串不可以做的事

字符串是受限的序列与典型的序列类型相比,字符串不具备列表的如下操作:append()、clear()、copy()、insert()、pop()、remove(),等等。
其中,append()、insert()、pop() 和 remove(),这些方法都是对单个元素的操作,但是,字符串中的单个元素就是单个字符,通常没有任何意义,我们也不会频繁对其做增删操作,所以,字符串没有这几个方法。
列表的 clear() 方法会清空列表,用来节省内存空间,效果等于anylist[:] = [],但是,Python 并不支持清空/删除操作。

首先,字符串没有 clear() 方法,其次,它是不可变对象,不支持这种赋值操作anystr[:] = ‘’,也不支持del anystr[:]操作:

当然,不能通过del s来删除字符串,因为变量名 s 只是字符串对象的引用,只是一个标签,删除标签并不会直接导致对象实体的消亡。

如此看来,好像是无法手动清空/删除 Python 字符串。

发布了4 篇原创文章 · 获赞 6 · 访问量 134

猜你喜欢

转载自blog.csdn.net/heyi5351230/article/details/105421322
今日推荐