欢迎来CILMY23的博客
本篇主题为 字符串处理技巧大揭秘:从基础到高级
个人主页:CILMY23-CSDN博客
Python系列专栏:http://t.csdnimg.cn/HqYo8
上一篇博客: http://t.csdnimg.cn/5NRlT
C语言专栏: http://t.csdnimg.cn/hQ5a9
感谢观看,支持的可以给个一键三连,点赞关注+收藏。
本文目录
3.1.4 startswith() 和 endswith()
本文前言
在初步认识了数据类型后,本期我们将详细介绍python中字符串函数的用法,以及字符串的操作。
一、字符串类型
1.1 什么是字符串类型
在上一篇中,我们讲解了什么是字符串,字符串作为组合数据,是一种在编程语言中用来表示文本数据的数据类型。字符串是一系列字符的序列,可以包含字母、数字、特殊字符和空格等。字符串可以使用单引号(')或双引号(")来表示,python还允许使用三引号(''')或('''''')创建跨多行的字符串,这种字符串中可以换行符、制表符及其他特殊字符,所以其实之前的注释本质上还是个字符串。
在Python中,支持如下几种类型的字符串。
普通字符串:在Python中用单引号(
'
)或双引号("
)括起来的字符串,例如:'Hello World'
或"Python is awesome"
。多行字符串:可以使用三个单引号(
'''
)或三个双引号("""
)来定义多行字符串,适合于包含换行符的长字符串,例如:''' This is a multiline string '''
原始字符串:使用前缀
r
或R
来定义原始字符串,原始字符串中的转义字符不会生效,适合处理正则表达式等场景,例如:r'C:\Users\'
。(常用来指示路径)格式化字符串:通过在字符串前加
f
或F
来定义格式化字符串,可以在字符串中使用表达式和变量,(常用于printf的输出)例如:name = 'Alice' age = 30 formatted_string = f'My name is {name} and I am {age} years old.'
字节字符串(bytes字节串):使用前缀
b
或B
定义字节字符串,字节字符串是以字节(而不是Unicode字符)为单位的字符串,适合处理二进制数据,例如:b'hello'
。Unicode字符串:Python 3中,普通字符串就是Unicode字符串,因此可以直接处理Unicode字符,无需额外声明类型。
1.2 字符串类型转换
在之前我们说类型转换的函数是用python自带的encode()函数和decode()函数,除了可以用这两个以外还可以用str()函数和bytes()函数进行转换。
str() 函数:用于将对象转换为字符串。如果给定的对象是字节字符串,则会使用默认编码(通常是 UTF-8)将其解码为字符串。
bytes()函数:用于将对象转换为字节字符串。如果给定的对象是字符串,则会使用默认编码(通常是 UTF-8)将其编码为字节字符串。
例如:
bytes_data = b'Hello'
string_data = str(bytes_data, encoding='utf-8') # 将字节字符串解码为字符串
string_data = 'Hello'
bytes_data = bytes(string_data, encoding='utf-8') # 将字符串编码为字节字符串
虽然 encode() 和 decode() 函数在某些情况下也可以用于字符串和字节字符串之间的转换,但它们的主要目的是处理各种数据类型的转换,并不如str()和bytes()方法那样专注于字符串和字节字符串之间的相互转换。因此,推荐在处理字符串类型的转换更适用于str()和bytes()。
二、字符串操作
2.1 创建字符串
在创建字符串的时候我们可以用 赋值运算符 = 来创建一个字符串,也可以使用str() 或 repr() 函数来创建字符串。
2.1.1 使用赋值运算符创建
这里是换种说法,实际上就是用单引号,双引号,三引号来创建一个字符串
# 2.1 使用赋值运算符创建
str1 = 'hello str1'
str2 = "hello world str2"
str3 = """
hello
world
str3
"""
str4 = '''
hello
world
str4
'''
print(str1, end=' ')
print(str2, end=' ')
print(str3, end=' ')
print(str4, end=' ')
在这里我们在print中使用一个end参数来连接各种输出,取消末尾的换行,因为空格不明显,所以我们可以把空格换成‘-’
结果如下:
2.1.2 使用str()或repr()
str() 或 repr() 函数的功能是将一个给定对象转换为字符串,其一般格式为: str(obj) 或 repr(obj)
其中,obj 为要转换的对象, repr()的用途更为广泛,可以将任何Python对象转换成为字符串对象
例如:
# 2.2 使用str() 或 repr()
print(str(8.42))
print(str(True))
print(str([4, 2, 9, 8]))
num = 42
repr_num = repr(num)
print(repr_num)
2.2 字符串访问
在Python中,访问字符串方式有以下三种
2.2.1 通过索引访问
Python为字符串中的每个字符分配一个数字来指代这个元素的位置,即索引。第一个元素的索引是0,第二个元素的索引是1。(有点类似C语言中的下标),同时,字符串还支持反向索引,字符串中最后一个字符的索引是-1,倒数第二个字符的索引是-2……
例如:
my_str = "CILMY23"
print(str[0])
print(str[-1])
2.2.2 通过切片访问
切片访问是指通过指定起始索引和结束索引来获取字符串中的子串的操作。Python中可以使用
str[start:end:step]的语法来实现字符串的切片访问。其中,start表示起始索引(包含),end表示结束索引(不包含),step是步长默认值是1.当三个参数都没有时,为整个字符串。
注意:
1. 不包含结束位置下标对应的数据,正负整数均可。
2. 步长是选取间隔,正负整数均可,默认步长为1。
# 2.2.2 切片
my_str = "CILMY23"
print(my_str[2:5])
print(my_str[:])
print(my_str[2:5:2])
print(my_str[-1:-3:-1])
print(my_str[::-1]) # 旋转输出字符串
print(my_str[-1:-3:-2])
print(my_str[-1:-3:1])
结果如下:
特别注意,三个参数要么都为正数,要么都为负数,否则无法打印。
2.2.3 通过字符串名访问
我们可以使用一个循环(看不懂也没事,之后会单独讲解)来打印一个字符串
my_str = "CILMY23"
for char in my_str:
print(char)
结果如下:
2.3 字符串运算
操作符 | 功能 |
+ | 字符串连接 |
* | 重复输出字符串 |
关系运算符 | 按两个字符串的索引位置依次比较 |
in | 如果字符串中包含给定的字符,则返回True;否则返回False |
not in | 如果字符串中不包含给定的字符,则返回True;否则返回False |
2.3.1 字符串连接
str1 = "CI"
str2 = "LMY"
str3 = "23"
connect_str = str1 + str2 + str3
print(connect_str)
结果如下:
注意,字符串的连接左右两边必须都为字符串,否则就会报错
2.3.2 重复打印字符串
# 2.3 字符串运算
str1 = "CI"
str2 = "LMY"
str3 = "23"
connect_str = str1 + str2 + str3
print(connect_str)
print(connect_str * 3)
结果如下:
2.3.3 in和not in
in 和not in是 Python 中用于检查一个字符是否存在于字符串中的成员运算符。
- in:如果目标字符存在于字符串中,则返回 True,否则返回 False。
- not in:如果目标字符不存在于字符串中,则返回 True,否则返回 False。
例如:
my_str = "CILMY23"
str1 = "CI"
str2 = "LMY"
str3 = "23"
str4 = "12"
# 使用 in 运算符检查子串是否存在
print(str1 in my_str)
print(str2 in my_str)
# 使用 not in 运算符检查子串是否不存在
print(str1 not in my_str)
print(str4 not in my_str)
结果如下:
2.3.4 关系运算符比较字符串
在Python中,可以使用关系运算符来比较字符串的大小或相等性。以下是常用的关系运算符:
等于运算符 (==): 检查两个字符串是否相等,如果相等则返回True,否则返回False。
不等于运算符 (!=): 检查两个字符串是否不相等,如果不相等则返回True,否则返回False。
大于运算符 (>): 检查第一个字符串是否大于第二个字符串,如果是则返回True,否则返回False。
小于运算符 (<): 检查第一个字符串是否小于第二个字符串,如果是则返回True,否则返回False。
大于等于运算符 (>=): 检查第一个字符串是否大于等于第二个字符串,如果是则返回True,否则返回False。
小于等于运算符 (<=): 检查第一个字符串是否小于等于第二个字符串,如果是则返回True,否则返回False。
这些运算符用于比较字符串时会逐字符比较它们的 Unicode 值。如果字符串长度不同但有共同前缀,则较短的字符串被认为小于较长的字符串。例如,"apple" 小于 "banana"。
例如:
str1 = "apple"
str2 = "banana"
print(str1 == str2) # 输出: False
print(str1 != str2) # 输出: True
print(str1 < str2) # 输出: True
print(str1 > str2) # 输出: False
print(str1 <= str2) # 输出: True
print(str1 >= str2) # 输出: False
两个字符串的比较一般遵循以下规则:
(1)如果都是西文字符串,则按照字符串每个字符的ASCII编码逐个进行比较
(2)如果都是中文字符串,则按照汉字的Unicode编码逐个进行比较
(3)如果分别是汉字字符串和英文字符串,则统一按照它们的Unicode编码逐个进行比较,一般都是汉字字符串大于英文字符串
三、字符串函数
3.1 字符串查找
在python中,字符串的查找通常有以下字符串函数
3.1.1 find()和rfind()
find(sub, start, end)
: 从左向右搜索子串 sub,并返回第一次出现的索引。如果未找到子串,则返回 -1。参数 start 和 end 可以指定搜索的起始和结束位置,默认为整个字符串。
rfind(sub, start, end)
: 从右向左搜索子串 sub,并返回最后一次出现的索引。如果未找到子串,则返回 -1。参数 start 和 end 可以指定搜索的起始和结束位置,默认为整个字符串。
例如:
# 3.1.1 find()和rfind()
string = "hello, hello, world!"
# 使用 find() 方法查找子字符串 "hello"
index1 = string.find("hello")
# 使用 rfind() 方法查找子字符串 "hello"
index2 = string.rfind("hello")
# 使用 find() 方法查找不存在的子字符串 "python"
index3 = string.find("python")
# 使用 rfind() 方法查找不存在的子字符串 "python"
index4 = string.rfind("python")
print(index1,index2,index3,index4)
结果如下:
3.1.2 index()和rindex()
index()和rindex()与find()和rfind()方法类似,都是用于在字符串中查找子串并返回其索引。它们的区别在于当子串不存在时的处理方式,后者是返回-1,而前者会直接报错。
index(sub, start, end)
: 从左向右搜索子串 sub,并返回第一次出现的索引。如果未找到子串,则报错。参数 start 和 end 可以指定搜索的起始和结束位置,默认为整个字符串。
rindex(sub, start, end)
: 从右向左搜索子串 sub,并返回最后一次出现的索引。如果未找到子串,则报错。参数 start 和 end 可以指定搜索的起始和结束位置,默认为整个字符串。
例如:
# 3.1.2 index()和rindex()
string = "hello, hello, world!"
# 使用 find() 方法查找子字符串 "hello"
index1 = string.index("hello")
# 使用 rfind() 方法查找子字符串 "hello"
index2 = string.rindex("hello")
# 使用 find()和rfind 方法查找不存在的子字符串 "python"
#index3 = string.index("python")
#index4 = string.rindex("python")
print(index1, index2)
例如:
3.1.3 count()
count()字符串函数用于统计字符串中某个子串出现的次数,并返回结果。.
语法:
str.count(sub, start, end)
- sub:要搜索的子串。
- start:搜索的起始位置(包含),默认为0。
- end:搜索的结束位置(不包含),默认为字符串的长度。
例如:
my_string = "Hello, World, Hello"
print(my_string.count("Hello"))
结果如下:
3.1.4 startswith() 和 endswith()
startswith() 和endswith() 用于检查字符串是否以指定的前缀或后缀开头或结尾。它们的语法如下:
startswith(prefix, start, end)
: 检查字符串是否以指定的 prefix 开头。如果是,则返回 True ;否则返回False。参数 start 和 end 指定搜索的起始和结束位置,默认为整个字符串。
endswith(suffix, start, end)
: 检查字符串是否以指定的 suffix 结尾。如果是,则返回 True ;否则返回False。参数 start 和 end 指定搜索的起始和结束位置,默认为整个字符串。
例如:
my_string = "Hello, World"
# 检查是否以指定的前缀开头
print(my_string.startswith("Hello")) # 输出: True
print(my_string.startswith("World")) # 输出: False
# 检查是否以指定的后缀结尾
print(my_string.endswith("World")) # 输出: True
print(my_string.endswith("Hello")) # 输出: False
3.2 字符串替换
python提供了replace()函数,其功能是把字符串中的旧字符串替换成新字符串
replace(oldStr,newStr,max)
- old:要被替换的子串。
- new:用于替换的新子串。
- max(可选):指定替换的最大次数,如果不指定,则全部替换。
该方法返回一个新的字符串,原始字符串不会被修改。
例如:
s = "Hello, World and up and good and Python and and aaaa and"
start = 0
count = s.count("and")
print(count)
s1 = s.replace("and", "ands", count)
print(s1)
结果如下:
3.3 字符串拆分
python提供一个split()函数,通过指定分隔符对字符串进行切片,返回一个字符串列表。
语法:
split(sep='', num)
- sep(可选):指定分隔符,默认为
None
,表示使用空白字符(空格、换行符等)作为分隔符进行分割。- num(可选):指定分割次数。如果指定了该参数,则最多分割 num次;未指定或者为
-1
,则进行所有可能的分割。该方法返回一个包含分割后子串的列表。
例如:
s = "Hello, World and up and good and Python and and aaaa and"
words = s.split(sep=" ")
print(words)
结果如下:
3.4 字符和ASCII码转换
ord()
和 chr()
是 Python 内置函数,用于字符和对应的 ASCII 码之间的转换。
ord(character)
:接受一个字符作为参数,返回对应的 ASCII 码值。chr(number)
:接受一个整数作为参数,返回对应 ASCII 码值的字符。
# 使用 ord() 将字符转换为 ASCII 码值
print(ord('A')) # 输出: 65
print(ord('a')) # 输出: 97
# 使用 chr() 将 ASCII 码值转换为字符
print(chr(65)) # 输出: 'A'
print(chr(97)) # 输出: 'a'
结果如下:
3.5 字符串长度
python提供了len()函数来计算字符串的长度
例如:
字符串 "Hello, World!" 中包含了13个字符(包括逗号和空格)
my_string = "Hello, World!"
length = len(my_string)
print(length)
结果如下:
3.6 字符串大小写转换
python提供了以下函数用于处理字符串的大小写转换
str.upper()
: 将字符串中的所有字符转换为大写形式,并返回转换后的新字符串。str.lower()
: 将字符串中的所有字符转换为小写形式,并返回转换后的新字符串。str.capitalize()
: 将字符串的第一个字符转换为大写,其余字符转换为小写,并返回转换后的新字符串。str.title()
: 将字符串中每个单词的首字母转换为大写,其余字母转换为小写,并返回转换后的新字符串。- str.swapcase(): 将字符串中的大小写字母互换,即将字符串中的大写字母转换为小写,小写字母转换为大写,并返回转换后的新字符串。
例如:
# 3.6 字符串大小写转换
my_string = "hello, world! HELLO \t"
upper_str = my_string.upper()
lower_str = my_string.lower()
capitalize_str = my_string.capitalize()
title_str = my_string.title()
swap_str = my_string.swapcase()
print(upper_str,lower_str,capitalize_str,title_str)
print(swap_str)
结果如下:
3.7 字符串去除空白
字符串去除空白是指将字符串中的空白字符(如空格、制表符、换行符等)从字符串的开头和结尾去除。在 Python 中,可以使用以下方法进行字符串去除空白操作:
str.strip()
: 去除字符串开头和结尾的空白字符,并返回去除后的新字符串。str.lstrip()
: 去除字符串开头的空白字符,并返回去除后的新字符串。str.rstrip()
: 去除字符串结尾的空白字符,并返回去除后的新字符串。
例如:
my_string = " hello, world! "
strip_str = my_string.strip()
left_strip_str = my_string.lstrip()
right_strip_str = my_string.rstrip()
print(strip_str, '\n', left_strip_str, '\n', right_strip_str)
结果如下:
3.8 判断字符串函数
由于这里判断字符串函数比较多就不举例子了,我们列个常用的字符表格,注意大多数字符串都至少有一个字符
函数 | 功能 |
isalpha() | 用于检查字符串是否只包含字母,并且至少有一个字符。 是那么返回True,否则返回False |
isspace() | 用于检查字符串是否只包含空白字符,并且至少有一个字符。 是那么返回True,否则返回False |
isdecimal() | 检查字符串是否只包含十进制字符,并且至少有一个字符, 是那么返回True,否则返回False |
isdigit() | 用于检查字符串是否只包含数字,并且至少有一个字符, 是那么返回True,否则返回False |
islower() | 用于检查字符串是否只包含小写字符 是那么返回True,否则返回False |
isupper() | 用于检查字符串是否只包含大写字符 是那么返回True,否则返回False |
isalnum() | 用于检查字符串是否只包含字母和数字,并且至少有一个字符 是那么返回True,否则返回False |
3.9 join()合并字符串
join用一个字符或子串合并字符串,即是将多个字符串合并为一个新的字符串。
例如:
my_list = ["apple", "banana", "cherry"]
separator = ", "
result = separator.join(my_list)
print(result)
结果如下:
四、转义字符
转义字符就是特殊用法的字符,在这里我们列个表格看,可以动手实操以下的转义字符
转义字符 | 描述 | 转义字符 | 描述 |
\ | 续行符(在行尾巴时) | \n | 换行 |
\\ | 反斜杠符号 | \v | 纵向制表符 |
\' | 单引号 | \t | 横向制表符 |
\'' | 双引号 | \r | 回车 |
\a | 响铃 | \f | 换页 |
\ | 退格(Backspace) | \oyy | 八进制数,yy代表的字符 |
\e | 转义 | \xyy | 十六进制,yy代表的字符 |
\000 | 空 | \other | 其他字符以普通格式输出 |
感谢各位同伴的支持,本期python就讲解到这啦,如果你觉得写的不错的话,可以给个一键三连,点赞,关注+收藏,若有不足,欢迎各位在评论区讨论。