6.1.4 字符串的截取

字符串的截取是实际应用中经常使用的技术,被截取的部分称为“子串”。Java使用函数substr()获取子串,C#使用函数substring()获取子串。而Python由于内置了序列,所以可以通过前面介绍的索引、切片获取子串,也可以使用函数split()来获取。字符串也属于序列,下面这段代码使用序列的索引获取子串。


01     # 使用索引截取子串
02     word = "world"
03     print (word[4])

【代码说明】第3行代码访问字符串第5个字符的值。输出结果为“d”。

通过切片可以实现对字符串有规律的截取。切片的语法格式如下所示。


string[start : end : step]

【代码说明】string表示需要取子串的源字符串变量。[start:end:step]表示截取从string的第start个索引开始到第end个索引之间的子串,截取的步长是step,即每次截取字符string[start+step],直到第end个索引。索引从0开始计数。

下面这段代码演示了使用切片截取子串的功能。


01     # 使用特殊切片截取子串
02     str1 = "hello world"
03     print (str1[0:3])
04     print (str1[::2])
05     print (str1[1::2])

【代码说明】

·第3行代码,截取字符串中第1个字符到第3个字符之间的部分。输出结果为“hel”。

·第4行代码,[::2]切片省略了开始和结束字符。从字符串的第1个字符开始,以2为步长逐个截取字符。输出结果为“hlowrd”。

·第5行代码,切片中的数字1表示从字符串的第2个字符开始取字符,数字2表示以2为步长逐个截取字符。输出结果为“el ol”。

如果要同时截取多个子串,可以使用函数split()实现。函数split()的声明如下所示。


split([char] [,num])

【代码说明】

·参数char表示用于分割的字符,默认的分割字符是空格。

·参数num表示分割的次数。如果num等于2,将把源字符串分割为3个子串。默认情况下,将根据字符char在字符串中出现的个数来分割子串。

·函数的返回值是由子串组成的列表。

下面这段代码演示了split()的使用。


01     # 使用split()获取子串
02     sentence = "Bob said: 1, 2, 3, 4"
03     print ("使用空格获取子串:", sentence.split())
04     print ("使用逗号获取子串:", sentence.split(","))
05     print ("使用两个逗号获取子串:", sentence.split(",", 2))

【代码说明】

·第3行代码根据空格来获取子串。字符串sentence中有5个空格,将返回由6个子串组成的列表。输出结果:


使用空格获取子串: ['Bob', 'said:', '1,', '2,', '3,', '4']

·第4行代码根据逗号来获取子串。字符串sentence中有3个空格,将返回由4个子串组成的列表。输出结果:


使用逗号获取子串: ['Bob said: 1', ' 2', ' 3', ' 4']

·第5行代码根据逗号来分割字符串,并把字符串sentence分割为3个子串。输出结果:


使用两个逗号获取子串: ['Bob said: 1', ' 2', ' 3, 4']

字符串连接后,Python将分配新的空间给连接后的字符串,源字符串保持不变。


01     str1 = "a"
02     print (id(str1))
03     print (id(str1 + "b"))

【代码说明】

·第2行代码输出str1的内部标识。输出结果为2787481021552。

·第3行代码进行字符串连接,新的字符串将获得新的标识。输出结果为2787490433456。