处理字符串
字符串字面量
在 Python 中输入字符串值相当简单的:它们以单引号开始和结束。但是如何才能在字符串内使用单引号呢?输入’That is Alice’s cat.‘是不行的,因为 Python 认为这个字符串在 Alice 之后就结束了,剩下的(s cat.’)是无效的 Python 代码。好在,有几种方法来输入字符串。
双引号
字符串可以用双引号开始和结束,就像用单引号一样。使用双引号的一个好处,就是字符串中可以使用单引号字符。在交互式环境中输入以下代码:
因为字符串以双引号开始,所以 Python 知道单引号是字符串的一部分,而不是表示字符串的结束。但是,如果在字符串中既需要使用单引号又需要使用双引号,那就要使用转义字符。
转义字符
“转义字符”让你输入一些字符,它们用其他方式是不可能放在字符串里的。转义字符包含一个倒斜杠 ( \ ) ,紧跟着是想要添加到字符串中的字符。(尽管它包含两个字符,但大家公认它是一个转义字符。)例如,单引号的转义字符是 \’ 。你可以在单引号开始和结束的字符串中使用它。为了看看转义字符的效果,在交互式环境中输入以下代码:
Python 知道,因为 Bob’s 中的单引号有一个倒斜杠,所以它不是表示字符串结束的单引号。转义字符’和"让你能在字符串中加入单引号和双引号。
下表列出了可用的转义字符:
转义字符 | 打印为 |
---|---|
\' | 单引号 |
\" | 双引号 |
\t | 制表符 |
\n | 换行符 |
\\ | 倒斜杠 |
在交互式环境中输入以下代码:
原始字符串
可以在字符串开始的引号之前加上 r,使它成为原始字符串。“原始字符串”完全忽略所有的转义字符,打印出字符串中所有的倒斜杠。例如,在交互式环境中输入以下代码:
因为这是原始字符串,Python 认为倒斜杠是字符串的一部分,而不是转义字符的开始。
用三重引号的多行字符串
虽然可以用\n转义字符将换行放入一个字符串,但使用多行字符串通常更容易。在 Python 中,多行字符串的起止是 3 个单引号或 3 个双引号。“三重引号”之间的所有引号、制表符或换行,都被认为是字符串的一部分。Python 的代码块缩进规则不适用于多行字符串。
打开文件编辑器,输入以下代码:
print('''Dear Alice,
Eve's cat has been arrested for catnapping, cat burglary, and extortion.
Sincerely,
Bob''')
将该程序保存为 catnapping.py 并运行。输出看起来像这样:
Dear Alice,
Eve's cat has been arrested for catnapping, cat burglary, and extortion.
Sincerely,
Bob
请注意,Eve’s 中的单引号字符不需要转义。在原始字符串中,转义单引号和双引号是可选的。下面的 print() 调用将打印出同样的文本,但没有使用多行字符串:
print('Dear Alice,\n\nEve\'s cat has been arrested for catnapping, cat burglary, and extortion.\n\nSincerely,\nBob')
多行注释
虽然井号字符(#)表示这一行是注释,但多行字符串常常用作多行注释。下面是完全有效的 Python 代码:
"""This is a test Python program.
This program was designed for Python 3, not Python 2.
"""
def spam():
"""This is a multiline comment to help
explain what the spam() function does."""
print('Hello!')
字符串下标和切片
字符串像列表一样,使用下标和切片。可以将字符串’Hello world!'看成是一个列表,字符串中的每个字符都是一个表项,有对应的下标。
' H e l l o w o r l d ! '
0 1 2 3 4 5 6 7 8 9 10 11
字符计数包含了空格和感叹号,所以’Hello world!'有 12 个字符,H 的下标是 0,!的下标是 11。在交互式环境中输入以下代码:
如果指定一个下标,你将得到字符串在该处的字符。如果用一个下标和另一个下标指定一个范围,开始下标将被包含,结束下标则不包含。因此,如果 spam 是’Hello world!‘,spam[0:5]就是’Hello’。通过spam[0:5]得到的子字符串,将包含 spam[0]到spam[4]的全部内容,而不包括下标 5 处的空格。
请注意,字符串切片并没有修改原来的字符串。可以从一个变量中获取切片,记录在另一个变量中。在交互式环境中输入以下代码:
通过切片并将结果子字符串保存在另一个变量中,就可以同时拥有完整的字符串和子字符串,便于快速简单的访问。
字符串的 in 和 not in 操作符
像列表一样,in 和 not in 操作符也可以用于字符串。用 in 或 not in 连接两个字符串得到的表达式,将求值为布尔值 True 或 False。在交互式环境中输入以下代码:
这些表达式测试第一个字符串(精确匹配,区分大小写)是否在第二个字符串中。