目录
字符串的表示方式
普通字符串
长字符串
字符串与数字的相互转换
将字符串转换为数字
将数字转换为字符串
格式化字符串
使用占位符
格式化控制符
操作字符串
字符串查找
字符串替换
字符串分割
字符串是一种不可变的字符序列。
字符串有三种表示方式:普通字符串、原始字符串和长字符串。
普通字符串指用单引号(')或双引号(")括起来的字符串。如'Hello'或"Hello"
>>>'Hello'
'Hello'
>>>"Hello'World" # 字符串本身包括单引号,可以使用双引号括起来,不需要转义
"Hello'World"
>>>'Hello"World' # 字符串本身包括双引号,可以使用单引号括起来,不需要转义
'Hello"World'
字符转义指的是如果想要在字符串中包含一些特殊的字符,例如换行符、制表符等,在普通字符串中就需要转义,前面要加上反斜杠,这叫字符转义。
常见的转义符如下。
>>>s='Hello\n World'
>>>s
Hello
World
>>>s='Hello\u000a World'
>>>print(s)
Hello
World
>>>s='Hello\t World'
>>>print(s)
Hello World
>>>s='Hello\' World'
>>>print(s)
Hello' World
>>>s='Hello\\ World'
>>>print(s)
Hello\ World
实际开发时,在普通字符串中可能有很多转义符,可以使用原始字符串表示,原始字符串中的特殊字符不需要被转义,按照字符串的本来样子呈现,在普通字符串前加r就是原始字符串。
>>>s='Hello\n World'
>>>print(s)
Hello
World
>>>s=r'Hello\n World' # 采用的是原始字符串表示,\n表示的不是换行符,而是\和n两个字符
>>>print(s)
Hello\n World
如果要使用字符串表示一篇文章,其中包含了换行、缩进等排版字符,则可以使用长字符串表示。对于长字符串,要使用三个单引号(''' )或三个双引号(""")括起来。
>>>s="""
《早发白帝城》
朝辞白帝彩云间,千里江陵一日还。
两岸猿声啼不住,轻舟已过万重山。
"""
>>>print(s)
《早发白帝城》
朝辞白帝彩云间,千里江陵一日还。
两岸猿声啼不住,轻舟已过万重山。
字符串与数字是不兼容的两种数据类型,不能进行隐式转换,只能通过函数进行显式转换。
将字符串转换为数字,可以使用int()和float()实现,如果成功则返回数字,否则引发异常。
>>>int("80")
80
>>>int("80.0") # 80.0无法转换为整数
error
>>>float("80.0")
80.0
>>>int("AB") # 按照十进制无法转换"AB"
error
>>>int("AB",16)
171
在默认情况下,int()函数都将字符串参数当作十进制数字进行转换,所以int('AB')会失败。int()函数也可以指定基数(进制)。
将数字转换为字符串,可以使用str()函数,str()函数可以将很多类型的数据都转换为字符串。
>>>str(123)
'123'
>>>money=5834.5678
>>>str(money)
'5834.5678'
>>>str(True)
'True'
我们在编程过程中经常会遇到将表达式的计算结果与字符串拼接到一起输出的情况。之前我们都是用str()函数将表达式的计算结果转换为字符串再与字符串拼接。
>>>i=32
>>>s='i*i='+str(i*i)
>>>s
'i*i=1024'
可以使用字符串的format()方法,它不仅可以实现字符串的拼接,还可以格式化字符串,例如再计算的金额需要保留小数点后四位、数字需要右对齐等时,可以使用该方法。
要想将表达式的计算结果插入字符串中,则需要用到占位符。对于占位符,使用一对大括号({})表示。
在占位符中可以有参数序号,序号从0开始。序号0被format()方法中的第1个参数替换;序号1被format()方法中的第2个参数替换,以此类推。
>>>i=32
>>>s='i*i='+str(i*i)
>>>s
'i*i=1024'
>>>s='i*i={}'.format(i*i) # {}字符串占位符被format()方法中的参数替换
>>>s
'i*i=1024'
>>>s='{0}*{0}={1}'.format(i,i*i)
>>>s
'32*32=1024'
>>>s='{p1}*{p1}={p2}'.format(p1=i,p2=i*i) # 在占位符中可以有参数名,p1和p2是在format()方法中设置的参数名,可以根据参数名替换占位符
>>>s
'32*32=1024'
在占位符中还可以有格式化控制符,对字符串的格式进行更加精准的控制。
字符串的格式化控制符及其说明如下表所示。格式化控制符位于占位符索引或占位符名字的后面,之间用冒号分隔,语法:{参数序号:格式控制符}或{参数名:格式控制符}。
>>>money=5834.5678
>>>name='Tony'
>>>'{0:s}年龄{1:d},工资是{2:f}元。'.format(name,20,money)
'Tony年龄20,工资是5834.567800元。'
>>>'{0}年龄{1},工资是{2:0.2f}元。'.format(name,20,money)
'Tony年龄20,工资是5834.57元。'
>>>"{0}今天收入是{1:G}元。".format(name,money)
'Tony今天收入是5837.57元。'
>>>"{0}今天收入是{1:g}元。".format(name,money)
'Tony今天收入是5834.57元。'
>>>"{0}今天收入是{1:e}元。".format(name,money)
'Tony今天收入是5834568e+03元。'
>>>"{0}今天收入是{1:E}元.".format(name,meney)
'Tony今天收入是5.834568E+03元。'
>>>'十进制数{0:d}的八进制表示为{0:o}'.format(18)
'十进制18的八进制表示为22'
>>>'十进制数{0:d}的十六进制表示为{0:x}'.format(18)
'十进制数18的十六进制表示为12'
字符串的find()方法用于查找子字符串。该方法的语法为str.find (sub[,start[,end]]),表示:在索引start到end之间查找子字符串sub ,如果找到,则返回最左端位置的索引;如果没有找到,则返回-1。
注意:在Python文档中[]表示可以省略部分内容,find()方法的参数[,start[,end]]表示start和end都可以省略。
>>>s_str='Hello World'
>>>s_str.find('e')
1
>>>s_str.find('l')
2
>>>s_str.find('l',4)
9
>>>s_str.find('l',4,6)
-1
若想进行字符串替换,则可以使用replace()方法替换匹配的子字符串,返回值是替换之后的字符串。该方法的语法为str.replace(old,new[,count]),表示:用new子字符串替换old子字符串。count参数指定了替换old子字符串的个数,如果count被省略,则替换所有old子字符串。
>>>text='AB CD EF GH IJ'
>>>text.replace(' ','|',2)
'AB|CD|EF GH IJ'
>>>text.replace(' ','|')
'AB|CD|EF|GH|IJ'
若想进行字符串分割,则可以使用split()方法,按照子字符串来分割字符串,返回字符串列表对象。该方法的语法为str.split(sep=None ,maxsplit=-1),表示:使用sep子字符串分割字符串str。maxsplit是最大分割次数,如果maxsplit被省略,则表示不限制分割次数
>>>text='AB CD EF GH IJ'
>>>text.split(' ')
['AB','CD','EF','GH','IJ']
>>>text.split(' ',maxsplit=0)
['AB CD EF GH IJ']
>>>text.split(' ',maxsplit=1)
['AB','CD EF GH IJ']