目录
一、字符串基础
1.字符串定义
2.字符串运算
3.逻辑与比较运算符
4.字符串访问
5.字符串格式化
6.转义字符
7.字符串常量
8.f-string格式化字符串
二、字符串函数
1.字符串函数目录
2.字符串函数用法
序列介绍
str对象称为 字符串。 字符串采用Unicode 编码,为不可变序列
字符串字面值有多种不同的写法:
(1)+ 字符串连接
a='Hello'
b='Python'
c=a + b
#c为'HelloPython'
(2)* 重复输出字符串
a * 2
#结果:'HelloHello'
(3)[] 通过索引获取字符串中字符
参考 字符串访问
(4)[:] 截取字符串中的一部分
参考 字符串访问
(5)in 与 not in 成员运算符
"H" in a
"M" not in a
(6)r/R 原始字符串,不进行转义
tab=r'\n'
stu=R'jack\tim'
(7)% 格式化字符串
参考 字符串格式化
(1)逻辑运算符
(2)比较运算符
比较规则为:
例:
a='aba'
b='acb'
a
(1)直接访问字符串中的值, 字符串索引第1位为0
'better man'[4]
(2)使用 变量名[n] 的方式,输出字符变量的单个值
name='better man'
n1=name[0]
(3)采用 字符串[n1:n2] 方法访问连续多个值
name='better man'[7:10]
当为 字符串[0:n2] 形式时,可省略写成 字符串[:n2]形式
name='better man'
n1=name[:3]
(4)循环读取字符串字符
a='abcdefg'
for str in a:print(str)
(5)等距截取
(1)seq[start:end:step] start为起始点,end为结束点,step为距长(即每隔step个字符提取)
(2)seq[:n] 等同 seq[0:n]
(3)seq[n:] 等同 seq[n:len(seq)]
(6)反向截取
(1)seq[-n]表示截取倒数第n个字符
(2)seq[n1:-n2]表示从(n1-1)个字符截取到倒数第n2个字符
例:
s1='STUDENT'
p1=s1[2:-2]
print(p1) #结果:UDE
p2=s1[-2:]
print(p2) #结果:NT
(3)seq[::-1]起到反转字符串的作用
s1='ABC'
p2=s1[::-1]
print(p2) #结果:CBA
字符串具有一种特殊的内置操作:使用 % (取模) 运算符。 这也被称为字符串的 格式化 或 插值 运算符。
1.字符串格式化符号:
2.格式化操作符辅助指令:
例:
(1)格式化字符串
print("His name is %s"%("Aviad"))
(2)格式化整数
print("He is %d years old"%(25))
(3)打印浮点数
print ("His height is %f m"%(1.83))
(4)打印浮点数(指定保留小数点位数)
print ("His height is %.2f m"%(1.83))
(5)指定占位符宽度
print ("Name:%10s Age:%8d Height:%8.2f"%("Aviad",25,1.83))
(6)指定占位符宽度(左对齐)
print ("Name:%-10s Age:%-8d Height:%-8.2f"%("Aviad",25,1.83))
(7)指定占位符(只能用0当占位符?)
print ("Name:%-10s Age:%08d Height:%08.2f"%("Aviad",25,1.83))
(8)科学计数法
print('%.2e'%0.00015) #结果:1.50e-04
(9)输出指定位数
import math;
PI = 3.1415926
print("PI = %10.3f" % math.pi) #输出PI = 3.142
print("PI = %-10.3f" % math.pi) #输出PI = 3.142
(10)输出指定长度
print("%.3s" %("abcde")) #输出abc
print("%.*s" %(4,"abcde")) #输出abcd
print("%10.3s" %("abcde")) #输出 abc(总长度为10,字符长度不够前面填空格)
print("%3d %0.2f"%(5,1276.2851)) #输出5 1276.28
例:
import string
print(string.digits)
#结果:0123456789
从Python 3.6开始,f-string是格式化字符串的新方法,更易读,更简洁,不易出错,而且速度更快!
案例:
name = 'Eric' print(f'Hello, my name is {name}')
#输出 'Hello, my name is Eric'
[1]capitalize
# 第一个字符转换为大写
str.capitalize()
[2]lower()
# 将字符串中所有大写字符转为小写
语法:str.lower()
[3]upper()
# 将字符串中所有小写字符转为小写
语法:str.upper()
[4]swapcase()
# 将字符串中大写转换为小写,小写转换为大写
语法:str.swapcase()
[5]title()
字符串标题化,即首字符大写
语法:str.title()
[6]center()
# 方法返回一个指定的宽度 width 居中的字符串,如果 width 小于字符串宽度直接返回字符串,否则使用 fillchar 去填充,默认为空格。
语法:str.center(width[, fillchar])
例:
str = "[www.runoob.com]"
str.center(40, '*')
[7]len()
# 返回字符串长度
语法:len(str)
[8]ljust()
# 返回一个原字符串左对齐,如果 width 小于字符串宽度直接返回字符串,否则使用 fillchar 去填充,默认为空格。
语法:str.ljust(width[, fillchar])
例:
str = "Runoob example....wow!!!"
print (str.ljust(50, '*'))
#结果:Runoob example....wow!!!**************************
[9]rjust()
# 返回一个原字符串右对齐,如果 width 小于字符串宽度直接返回字符串,否则使用 fillchar 去填充,默认为空格。
语法:str.rjust(width[, fillchar])
例:
str = "this is string example....wow!!!"
str.rjust(50, '*')
#结果:**************************Runoob example....wow!!!
[10]zfill()
# 返回指定长度width的字符串,原字符串右对齐,如果字符串长度不足,前面填充0
语法:str.zfill(width)
[11]count()
统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。
语法:str.count(sub, start= 0,end=len(string))
sub -- 搜索的子字符串
start -- 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。
end -- 字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。
例:
str="www.runoob.com"
str.count('run',0,10)
[12]max()
返回string中最大的字母
语法:max(str)
[13]min()
返回string中最小的字母
语法:min(str)
[14]decode()
以encoding指定的编码格式解码字符串。默认编码为字符串编码。
注:字符串没有decode属性,字符串先有编码encode,才后有解码decode
语法:str.decode(encoding='UTF-8',errors='strict')
encoding -- 要使用的编码,如"UTF-8"。
errors -- 设置不同错误的处理方案。
'strict'为默认方案,意为编码错误引起一个UnicodeError。
'ignore'忽略其中有异常的编码,仅显示有效的编码
'replace'替换其中异常的编码
其他可能得值有'xmlcharrefreplace', 'backslashreplace' 以及通过 codecs.register_error() 注册的任何值。
常用编码格式:
(1)gb2312 支持简体中文
(2)gbk 支持简体中文及繁体中文,GBK是在国家标准GB2312基础上扩容后兼容GB2312的标准
(3)big5 支持繁体中文
(4)utf-8 万国码,解决国际上字符的一种多字节编码,支持几乎所有字符
例:
str = "this is string example....wow!!!";
str2 = str.encode('utf-8') #以utf-8对str进行编码
str = str2.decode('utf-8') #以utf-8对str进行解码
[15]encode()
以encoding 指定的编码格式编码字符串
语法:str.encode(encoding='UTF-8',errors='strict')
encoding -- 要使用的编码,如"UTF-8"。
errors -- 设置不同错误的处理方案。
'strict'为默认方案,意为编码错误引起一个UnicodeError。
'ignore'忽略其中有异常的编码,仅显示有效的编码
'replace'替换其中异常的编码
其他可能得值有'xmlcharrefreplace', 'backslashreplace' 以及通过 codecs.register_error() 注册的任何值。
常用编码格式:
(1)gb2312 支持简体中文
(2)gbk 支持简体中文及繁体中文,GBK是在国家标准GB2312基础上扩容后兼容GB2312的标准
(3)big5 支持繁体中文
(4)utf-8 万国码,解决国际上字符的一种多字节编码,支持几乎所有字符
例:
u = u'中文'
str = u.encode('gb2312') #以gb2312编码对unicode对像进行编码
str1 = u.encode('gbk') #以gbk编码对unicode对像进行编码
str2 = u.encode('utf-8') #以utf-8编码对unicode对像进行编码
[16]startswith()
检查string是否是以某字符串开头,是则返回 True,否则返回 False
语法:str.startswith(str, beg=0,end=len(string))
str -- 检测的字符串。
strbeg -- 可选参数用于设置字符串检测的起始位置
strend -- 可选参数用于设置字符串检测的结束位置
例:
str = "this is string example....wow!!!"
print(str.startswith('this'))
[17]endswith()
判断字符串是否以指定后缀结尾,是则返回True,否则返回False
语法:str.endswith(suffix[, start[, end]])
suffix -- 该参数可以是一个字符串或者是一个元素
start -- 字符串中的开始位置
end -- 字符中结束位置
例:
Str='Runoob example....wow!!!'
suffix='!!'
print(Str.endswith(suffix))
print(Str.endswith(suffix,20))
[18]join()
将序列中的元素以指定的分隔符连接生成一个新的字符串
注:适用于序列对象:字符串、列表、元组
语法:str.join(sequence)
例:
(1)字符串:
seq='runoob'
res_str='_'.join(seq)
#结果:'r_u_n_o_o_b'
(2)列表
list1=('len','speak','chinese')
res_str='_'.join(list1)
#结果:'len_speak_chinese'
[19]find()
检测字符串中是否包含子字符串str,如果包含子字符串返回开始的索引值,否则返回-1
语法:str.find(str, beg=0, end=len(string))
str -- 指定检索的字符串
beg -- 开始索引,默认为0
end -- 结束索引,默认为字符串的长度
例:
str1 = "Runoob example....wow!!!"
str2 = "exam";
print (str1.find(str2))
print (str1.find(str2, 5))
print (str1.find(str2, 10))
[20]index()
检测字符串中是否包含子字符串str,如果包含子字符串返回开始的索引值,否则报异常
语法:str.index(str, beg=0, end=len(string))
str -- 指定检索的字符串
beg -- 开始索引,默认为0
end -- 结束索引,默认为字符串的长度
例:
str1 = "Runoob example....wow!!!"
str2 = "exam";
print (str1.index(str2))
print (str1.index(str2, 5))
print (str1.index(str2, 10))
[21]rfind()
类似于find()函数,不过是从右边开始查找
语法:str.rfind(str, beg=0 end=len(string))
str -- 指定检索的字符串
beg -- 开始索引,默认为0
end -- 结束索引,默认为字符串的长度
[22]rindex()
类似于index(),不过是从右边开始
语法:str.rindex(str, beg=0 end=len(string))
str -- 指定检索的字符串
beg -- 开始索引,默认为0
end -- 结束索引,默认为字符串的长度
[23]isalnum()
若string至少有一个字符并且所有字符都是字母或数字则返回True,否则返回False
语法:str.isalnum()
[24]isalpha()
若string至少有一个字符并且所有字符都是字母则返回True, 否则返回False
语法:str.isalpha()
[25]isdigit()
若string只包含数字则返回True否则返回False
语法:str.isdigit()
[26]islower()
若string中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回True,否则返回False
语法:str.islower()
[27]isnumeric()
若string中只包含数字字符,则返回True,否则返回False ,这种方法是只针对unicode对象
语法:str.isnumeric()
[28]isspace()
若string中只包含空格,则返回True,否则返回False
语法:str.isspace()
[29]istitle()
若string是标题化(所有单词以大写开始)则返回True,否则返回False
语法:str.istitle()
[30]isupper()
若string中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回True,否则返回False
语法:str.isupper()
[31]isdecimal()
检查字符串是否只包含十进制字符,返回True或False
语法:str.isdecimal()
[32]strip()
删除string头尾指定的字符(默认为空格)
语法:str.strip([chars])
chars -- 移除字符串头尾指定的字符
例:
str = "*****this is string example....wow!!!*****"
print (str.strip( '*' ))
[33]lstrip()
截掉字符串左边的空格或指定字符
语法:str.lstrip([chars])
chars -- 移除字符串头尾指定的字符
例:
str = "88888888this is string example....wow!!!8888888";
print( str.lstrip('8') );
#结果:this is string example....wow!!!8888888
[34]rstrip()
截掉字符串右边的空格或指定字符
语法:str.rstrip([chars])
chars -- 移除字符串头尾指定的字符
[35]replace()
替换指定字符串
语法:str.replace(old, new[, max])
old -- 将被替换的子字符串。
new -- 新字符串,用于替换old子字符串。
max -- 可选字符串, 替换不超过 max 次
例:
str = "this is string example....wow!!!"
print (str.replace("is", "was", 3))
[36]expandtabs() 把string中的tab符号转为空格
把字符串中的 tab 符号('\t')转为空格,tab 符号('\t')默认的空格数是 8
语法:str.expandtabs(tabsize=8)
tabsize -- 指定转换字符串中的 tab 符号('\t')转为空格的字符数
例:
str = "this is\tstring example....wow!!!"
str.expandtabs()
[37]split()
通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串
返回值:列表
语法:str.split(str="_", num=string.count(str))
str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等
num -- 分割次数,省略则为全部
例:
str='len_speak_chinese'
str_list=str.split('_')
[38]splitlines()
按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符
返回值:列表
语法:str.splitlines([keepends])
keepends -- 在输出结果里是否去掉换行符('\r', '\r\n', \n'),默认为 False,不包含换行符,如果为 True,则保留换行符
行边界符:
\n 换行
\r 回车
\r\n 回车 + 换行
\v 或 \x0b 行制表符
\f 或 \x0c 换表单
\x1c 文件分隔符
\x1d 组分隔符
\x1e 记录分隔符
\x85 下一行 (C1 控制码)
\u2028 行分隔符
\u2029 段分隔符
例:
str='ab c\n\nde fg\rkl\r\n'
str_list=str.splitlines(True)
#结果:['ab c\n', '\n', 'de fg\r', 'kl\r\n']
[39]maketrans()
创建字符映射的转换表,用translate函数实现映射转换,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标
注:两个字符串的长度必须相同,为一一对应的关系。
语法:str.maketrans(intab, outtab)
intab -- 字符串中要替代的字符组成的字符串。
outtab -- 相应的映射字符的字符串。
例:参考translate()
[40]translate() 根据maketrans给出的表转换string的字符
根据参数table给出的表(包含 256 个字符)转换字符串的字符, 要过滤掉的字符放到 deletechars 参数中
语法:str.translate(table[, deletechars])
table -- 翻译表,翻译表是通过maketrans方法转换而来。
deletechars -- 字符串中要过滤的字符列表。
例:
intab = "aeiou"
outtab = "12345"
trantab = str.maketrans(intab, outtab)
str = "this is string example....wow!!!"
print (str.translate(trantab))
#结果:th3s 3s str3ng 2x1mpl2....w4w!!!