目录
1. 字符串和转义符
2. 字符串内建函数
3. 字符串高级操作
4. 保持字符串的原汁原味
5. 长字符串
字符串的意思就是“一串字符”,也可以看做是字符的序列。比如“Helo, Mike”是一个字符串,“How are you?”也是一个字符串。Python要求字符串必须使用引号括起来,不过Python与大多数编程语言不同,在Python中,既允许使用单引号(‘)表示字符串,也允许使用双引号(")表示字符串。但单引号和双引号必须成对出现。
字符串的内容几乎可以包含任何字符,例如,英文字符、数字、汉字等。
PS:Python3.x对中文字符支持较好,但 Python2.x则要求在源程序中增加“#coding:utf-8”才能支持中文字符。
下面的程序是字符串的基本用法:
str1 = 'hello world' # 使用单引号表示字符串
str2 = "Python从菜鸟到高手" # 使用双引号表示字符串
print(str1)
print(str2)
但需要说明的是,Python并没有我们想象的那么聪明,如果字符串内容本身包含了单引号或双引号,就可能需要进行特殊处理。这里说的可能是指如果用双引号表示字符串,那么字符串中可以包含单引号,但不能直接包含双引号,如果用单引号表示字符串,那么字符串中可以有双引号,但不能直接包含单引号。那么如果非要包含单引号和双引号该怎么办呢?这就需要用到本节要讲的转义符。
先看第一种处理方式。假如字符串内容中包含了单引号,则可以使用双引号将字符串括起来。
例如,下面的代码是错误的。
str3=’I'm a coder'
由于上面字符串中包含了单引号,此时 Python会将字符串中的单引号与字符串中第1个单引号配对,这样就会把'I'当成字符串,而后面的 m a coder'就变成了多余的内容,从而导致语法错误。
为了避免这种问题,可以将上面代码改为如下形式:
str3 = "I'm a coder"
上面代码使用双引号将字符串括起来,此时 Python就会把字符串中的单引号当成字符串内容,而不是和字符串开始的引号配对。假如字符串内容本身包含双引号,则可使用单引号将字符串括起来,例如如下代码:
str4 = '"The weather is so hot today, it is already sweating!", said Mike'
接下来看第2种处理方式:转义符。 Python允许使用反斜线(/)将字符串中的特殊字符进行转义。假如字符串既包含单引号,又包含双引号,此时必须使用转义字符,例子代码如下:
str5 = '"The weather is so hot today, it\'s already sweating!", said Mike'
Python 为字符串提供了40多个内建函数,在这一节只介绍其中几个常用的方法,其他的方法在使用上大同小异。
str1 = " Hello world! 你好"
str2 = "world"
#返回字符串的长度:len(str)
print('str1的长度:',len(str1))
#对字符串进行分割:split(str),分割符为str,此处以空格进行分割
print('str1以空格分割的结果:',str1.split(' '))
#删除字符串首尾的空格
print('str1删除首尾空格:',str1.strip())
#返回 str2 在 str1 里面出现的次数,如果 begin 或者 end 指定则返回指定范围内 str2出现的次数
print('str2在str1中出现的次数:',str1.count(str2))
print('str2在str1中出现的次数(指定范围):',str1.count(str2,10,22))
#检查字符串是否以 obj 结束,如果begin 或者 end 指定则检查指定的范围内是否以 obj 结束
#如果是,返回 True,否则返回 False.
print('str1是否以 str2结尾:',str1.endswith(str2))
print('str1是否以 str2结尾(指定范围):',str1.endswith(str2,10,19))
#检测 str2是否包含在字符串str1中,如果指定范围 begin 和 end ,则检查是否包含在指定范围内,
#如果包含返回开始的索引值,否则返回-1
print('str1中是否包含str2:',str1.find(str2))
print('str1中是否包含str2(指定范围):',str1.find(str2,6,22))
运行结果如下图所示:
本节介绍一些与字符串相关的高级操作
(3) 反转字符串
所谓反转字符串,就是将字符串按字符顺序倒序排列,例如,python编程nohtyp。这里提供了2种方法用于字符串反转。
方法1: 使用join和reversed函数
s = "python"
for c in reversed(s):
print(c, end=" ")
print()
rs = ''.join(reversed(s))
print(rs)
输出结果如下图所示:
其中reversed函数返回字符串s的一个逆序可迭代的对象(每一个对象元素是一个字符)。然后再用join函数将这些字符连接起来,中间的分隔符是空串(长度为0的字符串),所以就会输出逆序字符串了。
#方法2
print(s[::-1])
这种方法利用了切片技术,如果step是-1,就会逆序输出
(2)字符串切片操作
字符串的分片就是截取字符串。截取字符串需要指定开始截取的位置(begin)、截取结束的位置(end)、步长(step)。分片操作与引用数组元素类似,使用一对中括号。只是在中括号中要指定begin、end和step中间用冒号(:)分隔。下面是一个字符串分片的例子。
s1 = "hello world"
# 在字符串中使用索引
print(s1[0]) # 获取s1的第1个字符,运行结果:h
print(s1[2]) # 获取s1的第3个字符,运行结果:l
# 在字符串中使用分片
print(s1[6:9]) # 获取s1从第7个字符往后的3个字符,运行结果:wor
print(s1[6:]) # 获取s1从第7个字符后的所有字符,运行结果:world
print(s1[::2]) # 在s1中每隔一个取一个字符,运行结果:hlowrd
本文前面讲过转义符(\)的应用,其实转义符不光能输出单引号和双引号,还能控制字符串的格式,例如,使用“\n”表示换行,如果在字符串中含有“\n”,那么“\n”后的所有字符都会被移到下一行。
print('Hello\nWorld')
输出如下结果:
Hello
World
如果要混合输出数字和字符串,并且换行,可以先用str函数将数字转换为字符串,然后在需要换行的地方加上“\n”。
print(str(1234) + "\n" + str(4321))
输出结果如下:
1234
4321
不过有的时候,我们不希望Python解析器转义特殊字符,希望按原始字符串输出,这时需要使用repr函数。
print(repr("Hello\nWorld"))
输出结果如下:
'Hello\nWorld'
使用repr函数输出的字符串,会使用一对单引号括起来。
其实如果只想输出“\n”或其他类似的转义符,也可以使用两个反斜杠输出“\”,这样“\”后面的n就会被认为是普通的字符了。
print("Hello\\nWorld")
输出结果如下:
Hello\nWorld
除了前面介绍的repr和转义符外,在字符串前面加“r”也可以原样输出字符串。
print(r"Hello\nWorld")
输出结果如下:
Hello\nWorld
现在总结一下,如果让一个字符串按原始内容输出(不进行转义),有如下3种方法。
下面的例子完整地演示了str和repr函数的用法。
# 输出带“\n"的字符串,运行结果:
print("")
# 用str函数将1234转换为数字,运行结果:1234
print(str(1234))
# 抛出异常,len函数不能直接获取数字的长度
#print(len(1234))
# 将1234转换为字符串后,获取字符串长度,运行结果:4
print(len(str(1234)))
# 运行结果:
print(str(""))
# 运行结果:13
print(len(str("")))
# 运行结果:''
print(repr(""))
# 运行结果:16
print(len(repr("")))
# 使用转义符输出“\”,输出的字符串不会用单引号括起来,运行结果:hello\nworld
print("")
# 运行结果:14
print(len(""))
# 在字符串前面加“r”,保持字符串原始格式输出,运行结果:hello\nworld
print(r"")
# 运行结果:14
print(len(r""))
运行结果如下图所示:
使用3个单引号或双引号括起来的文本会成为多行注释,其实如果将这样的字符串使用print函数输出,或赋给一个变量,就会成为一个长字符串。在长字符串中会保留原始的格式。
print("""Hello # 长字符串,会按原始格式输出 World""");
如果使用长字符串表示一个字符串,中间可以混合使用双引号和单引号,而不需要加转义符。
print("""Hell"o" # 长字符串,中间混合使用双引号和单引号 W'o'rld"""
对于普通字符串来说,同样可以用多行来表示。只需要在每一行后面加转义符(\),这样以来,换行符本身就“转义”了,会被自动忽略,所以最后都会变成一行字符串。
print("Hello\n # 输出一行字符串 World")
下面的例子完整地演示了长字符串的用法。
print('''I # 使用3个单引号定义长字符串
'love'
"Python"
'''
)
s = """Hello # 使用双引号定义长字符串
World
世界
你好
"""
print(s) # 输出长字符串
print("Hello\ # 每行字符串在回车符之前用转义符,就可以将字符串写成多行
World")
程序运行结果如下图所示: