python 里的字符串函数
python 里的字符串函数
一: 字符串介绍
1.1 什么是字符串
字符串是一种表示文本的数据类型,使用str 表示.可以使用单引号'' ; 双引号""; 三引号''''''; 来定义
复制a='123'
b="123"
c='''123'''
print(type(a))
print(type(b))
print(type(c))
# 输出结果
<class 'str'>
<class 'str'>
<class 'str'>
1.2 转义字符
对于特殊字符,我们可以使用 反斜线\ 来进行转义
复制# 如果使用单引号定义字符串,字符串里面包含单引号则报错
a = 'I'm zhangsan'
#使用反斜线 \ 对单引号’ 进行转义
b = 'I\'m zhangsan'
# 或者如果字符串里包含单引号,可以使用双引号“” 定义字符串
c = "I'm zhangssan"
1.3常用的转义字符
转义字符 | 代表含义 |
---|---|
\(在行尾时) | 反斜杠符号,可以换行输入 |
\\ | 反斜杠符号,仅表示反斜杠 |
\" | 双引号 |
\n | 换行 |
\b | 退格 |
\t | 横向制表符 |
二:字符串输入输出
2.1 字符串格式化输出
使用 %s 格式化字符串
复制name = "zhangsan"
age = 18
gender = "nan"
# 可以理解为%s 相当于占位符,为后面%的内容占位
print("他叫%s" %name)
# 多个%s 的使用
print("他叫%s,%s,%s" %(name,age,gender))
# 输出结果
他叫zhangsan
他叫zhangsan,18,nan
常见的格式化符号
格式化符号 | 转换 |
---|---|
%s | 字符串 |
%d | 有符号十进制整数 |
%f | 浮点实数 |
2.2 字符串输入
python3中可以使用input函数,从标准输入读取一行文本。默认的标准输入是键盘。
input可以接受一个python表达式作为输入。并将结果返回
复制name = input("请输入您的姓名:")
# 读取进来的是字符串,使用int()函数将其转换为整型
age = int(input("请输入您的年龄:"))
print(name,age)
# 输出结果
请输入您的姓名:zhangsan # 键盘输入zhangsan
请输入您的年龄:8 # 键盘输入 8
zhangsan 8
三:访问字符串中的值
3.1 字符串的存储方式
字符串每个字符都对应一个下标,下标编号是从0开始
复制name = "abcdefg"
# 输出字符串下标为0 的字符
print(name[0])
print(name[1])
print(name[6])
# 输出结果:
a
b
g
3.2 字符串切片
切片语法格式:
[起始:结束:步长]
ps:切片选取的区间属于左闭右开型,即从"起始"位开始,到"结束"位前一位结束(不包含结束位本身).
复制# 演示字符串切片
a = "Hello,I'm#zhangsan."
# 使用len()函数,获取字符串长度
print(len(a))
# 打印下标为 5 的字符(即,第6个字符)
print(a[5])
# 打印下标为 5 到 下标10 (注意,左闭右开)
print(a[5:11])
# 从头开始,打印到下标 5
print(a[0:4])
print(a[:5])
# 从下标5开始,打印到最后一个
print(a[5:])
# 从下标5开始,打印到倒数第二个
print(a[5:-1]) # -1 表示倒数第一个字符串.由于是左闭右开,所以会打印到倒数第二个
# 打印下标 5 到 下标10 ,步长为2 (即,从下标5开始,打印5,7,9)
print(a[5:11:2])
# 从最后一个开始,没隔一个字符打印(即,步长为2)
print(a[::-2]) # [::]表示从开头取值到结尾. -2 表示,从末尾开始,步长为2,打印
# 输出结果:
19
,
,I'm#z
Hell
Hello
,I'm#zhangsan.
,I'm#zhangsan
,'#
.agazmIolH
四: 字符串内建函数
4.1 常用的字符串内建函数
字符串函数 | 释义 |
---|---|
len(string) | 返回字符串长度 |
string.find(str[,start[,end]]) | 检测 str 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含在指定范围内, 如果是返回开始的索引值,否则返回-1 |
rfind(str, beg=0,end=len(string)) | 类似于 find()函数,不过是从右边开始查找. |
string.index(str, beg=0, end=len(string)) | 跟find()方法一样,只不过如果str不在 string中会报一个异常. |
rindex( str, beg=0, end=len(string)) | 类似于 index(),不过是从右边开始. |
count(str, beg= 0,end=len(string)) | 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数 |
replace(old, new [, max]) | 把 将字符串中的 old 替换成 new,如果 max 指定,则替换不超过 max 次。 |
split(str="", num=string.count(str)) | 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串 |
splitlines([keepends]) | 按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。 |
startswith(substr, beg=0,end=len(string)) | 检查字符串是否是以指定子字符串 substr 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。 |
endswith(suffix, beg=0, end=len(string)) | 检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False. |
lstrip() | 截掉字符串左边的空格或指定字符。 |
rstrip() | 删除字符串末尾的空格或指定字符。 |
strip([chars]) | 在字符串上执行 lstrip()和 rstrip() |
4.2 演示字符串内建函数
4.2.1 find /rfind函数
string.find(str[,start[,end]])
检测 str 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含在指定范围内,
如果是返回开始的索引值,否则返回-1
复制a = "Hello,I'm Tom"
b = "Hello"
c = "I'm Lucy"
# 查询a的长度
print(len(a))
# 查询 b 是否在a中
print(a.find(b))
# 从a的下标为3开始到10结束,查询是否包含b
print(a.find(b,3,11))
# 查询 c 是否 在a中
print(a.find(c))
# 使用find 函数,从左边向右边查询,查询a 中包含字符串"o" 的下标位置(第一个查询到的位置)
print(a.find("o"))
# 使用rfind 函数,从右边开始向左查询,查询a 中包含字符串"o" 的下标位置(第一个查询到的位置)
print(a.rfind("o"))
#输出结果:
13
0
-1
-1
4
11
4.2.2 index函数
string.index(str, beg=0, end=len(string))
跟find()方法一样,只不过如果str不在 string中会报一个异常.
复制a = "Hello,I'm Tom"
b = "Hello"
c = "I'm Lucy"
print(a.index(b))
print(b.index(c))
# 返回结果:
0
ValueError: substring not found
4.2.3 count函数
count(str, beg= 0,end=len(string))
返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
复制a = "Hello,I'm Tom"
# 查看a中,字符串"o"出现次数
print(a.count("o"))
# 查看a的下标0到6中,出现字符串"o"的次数
print(a.count("o",0,7))
# 输出结果:
2
1
4.2.4 replace 函数
replace(old, new [ , max])
把 将字符串中的 old 替换成 new,如果 max 指定,则替换不超过 max 次。
复制a = "Hello,I'm Tom.I'm 18 years old.My school is hahaha"
# 将a中的字符串"o" 替换为"A"
print(a.replace("o","A"))
# 将a中的字符串"o" 替换为"A",最多替换2次
print(a.replace("o","A",2))
# 输出结果:
HellA,I'm TAm.I'm 18 years Ald.My schAAl is hahaha
HellA,I'm TAm.I'm 18 years old.My school is hahaha
4.2.5 split函数
split(str="", num=string.count(str)) 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串
复制a = "Hello,I'm Tom.I'm 18 years old.My school is hahaha"
# 将a按照 . 分割
print(a.split("."))
# 将a按照 . 分割,分割1次
print(a.split(".",1))
# 输出结果:
["Hello,I'm Tom", "I'm 18 years old", 'My school is hahaha']
["Hello,I'm Tom", "I'm 18 years old.My school is hahaha"]
4.2.6 startwith和endsoth
startswith(substr, beg=0,end=len(string)) | 检查字符串是否是以指定子字符串 substr 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。 |
---|---|
endswith(suffix, beg=0, end=len(string)) | 检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False. |
复制a = "hello,I'm LiLei,How are you!Hello"
b = "Hello"
c = "I'm LiLei"
print(a.startswith('hello'))
print(a.startswith('Hello'))
print(a.startswith('Hello',28))
print("-----")
print(a.endswith('Hello'))
print(a.endswith('hello'))
print(a.endswith('hello',0,5))
# 输出结果
True
False
True
-----
True
False
True
4.2.7 lstrip ,rstrip , strip 函数
lstrip() | 截掉字符串左边的空格或指定字符。 |
---|---|
rstrip() | 删除字符串末尾的空格或指定字符。 |
strip([chars]) | 在字符串上执行 lstrip()和 rstrip() |
复制a = "hello,I'm Lucy,How are you!hello"
print(a.lstrip('hello'))
print(a.rstrip('hello'))
print(a.strip('hello'))
# 输出结果
,I'm Lucy,How are you!hello
hello,I'm Lucy,How are you!
,I'm Lucy,How are you!
4.2.8 format 函数
string.format()
格式化字符
format 函数可以接受不限个数参数,位置可以不按照顺序
复制a = "abc"
b = 123
print("{}{}".format(a,b))
print("{1}{0}".format(a,b))
#输出结果:
abc123
123abc
4.2.9 parttion 函数和rpartion
string.partition(str)
有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 元 素 的 元 组 (string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string
复制a = "abc#123#def#456"
# 从左边开始出现的第一个#字符开始分割
print(a.partition("#"))
# 从右边开始出现的第一个# 字符开始分割
print(a.rpartition(("#")))
#输出结果
a = "abc#123#def#456"
print(a.partition("#"))
print(a.rpartition(("#")))
4.3 字符串运算符
操作符 | 描述 |
---|---|
+ | 字符串连接 |
* | 重复输出字符串 |
[] | 通过索引获取字符串中的字符 |
[:] | 截取字符串中的一部分 |
in | 成员运算符,如果字符串中包含给定的字符,返回True |
not in | 成员运算符。如果字符中不包含给定的字符,返回True |
r/R | 表示原始字符串,即字符串的所有字符都按照字面的意思使用。没有转义字符或不能打印的字符. |
复制a = "abc"
b = "def"
print(a+"---",b)
print("#"*5)
print(a[0])
print(a[0:1])
print("a" in a)
print(b in a)
print("o" not in a)
print("a" not in a)
print('haha \n AAA')
print(r'haha \n AAA')
# 输出结果
abc--- def
#####
a
a
True
False
True
False
haha
AAA
haha \n AAA
4.4 字符串使用示例
给定一个字符串 "你好,我叫{},我的年龄是:{},我的性别是:{}“
要求:
- 通过输入,把姓名,年龄,性别填充进去
- 切割上面的字符串,把第二个逗号后面的内容去掉
- 把上面的结果字符串,按照逗号分割成列表
- 把第二个结果字符串和第三个结果字符串用 ''' 拼接(至少两个方案)
- 判断第二个字符串是否在第一非字符串中(至少3个方案)
- 替换所有的我,变为他
- 把所有中文冒号,替换成英文冒号
复制
name=input("请输入您的姓名:")
age=input("请输入您的年龄:")
sex=input("请输入您的性别:")
# 1
a="你好,我叫:{0},我的年龄是:{1},我的性别是:{2}"
result1=a.format(name,age,sex)
print(result1)
# 2 利用rfind 函数,从右边获取最后一个逗号的下标
num=(result1.rfind(','))
# 在使用字符串截取的方式
result2=result1[:num]
print(result2)
# 用partition 函数,以逗号为分隔,将字符串分成三个元祖形式的列表
result3=(result2.partition(','))
print(result3)
# 使用str() result2 和result3 转换为字符串,在使用+ 拼接
result4_1=str(result2)+"'''"+str(result3)
print(result4_1)
# 使用format 拼接
result4_2="{0}{1}{2}".format(result2,"'''",result3)
print(result4_2)
# 5
# 使用in 成员运算符,如果resutl1 包含result2字符,则返回True
if result2 in result1:
print("yes")
# 使用find 函数,如果result1 中包含resutl2,则返回下标。否则返回-1
result5_2=result1.find(result2)
if result5_2 != -1:
print("yes")
# 使用index函数,如果resutl1 包含result2,则返回下标(>=0) ,否则报错
result5_3=result1.index(result2)
if result5_3 >= 0:
print("yes")
# 替换使用replace 函数
result6 = result1.replace("我","他")
print(result6)
result7 = result1.replace(":","is")
print(result7)
# 输出结果:
请输入您的姓名:zhangsan
请输入您的年龄:18
请输入您的性别:nan
你好,我叫:zhangsan,我的年龄是:18,我的性别是:nan
你好,我叫:zhangsan,我的年龄是:18
('你好,我叫:zhangsan', ',', '我的年龄是:18')
你好,我叫:zhangsan,我的年龄是:18'''('你好,我叫:zhangsan', ',', '我的年龄是:18')
你好,我叫:zhangsan,我的年龄是:18'''('你好,我叫:zhangsan', ',', '我的年龄是:18')
yes
yes
yes
你好,他叫:zhangsan,他的年龄是:18,他的性别是:nan
你好,我叫iszhangsan,我的年龄是is18,我的性别是isnan
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现