本章范围
本章主要讲str
字符串类型,有关的操作适用于Unicode处理。
Unicode简介
ASCII是Unicode的简单形式,但Unicode适用于非英语地区的人们。两者在文件中的编码不同。
-
在Python 3.X中,有三种字符串类型:
str
用于Unicode文本,bytes
用于二进制数据,bytearray
是bytes
的一种可修改的变体。 -
在Python 2.X中,
unicode
字符串表示Unicode文本,str
同时处理8位文本和二进制数据。
实际上,Unicode的主要不同在于它在内存和文件之间来回移动所要求的转换步骤。除此之外它大体上只是一个字符串处理过程。
字符串基础
字符串可以用来表示能够编码为文本或字节的人和事物。Python的字符串有一套强大的处理工具集,并划分为不可变序列的类型(即不能在原位置修改字符串)。
以下是常见的字符串字面量和操作:
操作 | 解释 |
---|---|
S = '' |
空字符串 |
S = "spam's" |
双引号,和单引号相同 |
S = 'snptax00m |
包含转义序列 |
S = """...multiline...""" |
三引号块字符串 |
S = r'tempspam' |
原始字符串,不转义 |
B = b'spxc4m' |
字节串 |
U = u'spu00c4m' |
Unicode字符串 |
S1 + S2 |
拼接 |
S * 3 |
重复 |
S[i] |
索引 |
S[i:j] |
分片 |
len(S) |
长度 |
"a %s parrot" % kind |
字符串格式化表达式 |
"a {0} parrot".format(kind) |
字符串格式化表达式 |
S.find('pa') |
字符串方法:搜索 |
S.rstrip() |
移除右侧空白 |
S.replace('pa', 'xx') |
替换 |
S.split(',') |
用分隔符分组 |
S.isdigit() |
内容测试,是否为数字 |
S.lower() |
大小写转换,转换为小写 |
S.endwith('spam') |
尾部测试,是否以参数为结尾 |
'spam'.join(strlist) |
分隔符连接 |
S.encode('latin-1') |
Unicode编码 |
B.decode('utf8') |
Unicode解码等 |
for x in S: print(x) |
迭代 |
'spam' in S |
成员关系 |
[c * 2 for c in S] |
成员关系 |
map(ord, S) |
返回单个字符的ASCII序号 |
`re.match(‘sp(.*)am’, line) | 模式匹配:库模块 |
除了上述工具集,Python还有支持更高级的字符串方法,如正则表达式匹配、XML解析器等的。
字符串字面量
Python的字符串有许多方法编写:
-
单引号:
'spa"m'
-
双引号:
"spa'm"
-
三引号:
'''...spam...''', """...spam..."""
-
转义序列:
"stpna m"
-
原始字符串:
r"C:newtest.spm"
-
字节字面量:
b'spx01am'
-
Unicode字面量:
u'eggsu0020spam'
单引号和双引号字符串是一样的
Python支持单引号和双引号的原因是,解决字符串中含有"
或'
的问题。但是,如果字符串中没有单引号,最好使用单引号字符串(Python显示字符串时也是单引号)。
>>> "123"
'123'
如果我们忘记了用逗号把字符串分开,那么Python会自动拼接相邻的字符串字面量:
>>> 'Meaning ', 'of ', 'life'
('Meaning ', 'of ', 'life')
>>> "Meaning " 'of ' "life"
'Meaning of life'
如果字符串中既有单引号又有双引号,我们可以使用转义字符:
>>> 'knight's'
"knight's"
>>> "knight"s"
'knight"s'
转义序列代表特殊字符
反斜杠用来引入特殊的字符编码,称为转义序列。它帮助我们在字符串中嵌入不容易通过键盘输入的字符。看上去,以为开头的转义字符占两个字节,但其实只占一个。
直接在交互界面上输入字符串变量,不会解释转义字符,print
解释转义字符。
>>> s = 'anbtc'
>>> s
'anbtc'
>>> print(s)
a
b c
上面的字符串包含5个字符,分别是:a
、换行、b
、制表、c
。但不是5字节(因为字符串以Unicode编码)。反斜杠没有存进去。
Python的转义字符序列如下表:
转义 | 意义 |
---|---|
newline |
被省略(行的延续) |
\ |
范斜杠(保留一个 ) |
' |
单引号 |
" |
双引号 |
a |
响铃 |
b |
退格 |
f |
换页 |
n |
换行 |
r |
回车 |
t |
水平制表符 |
v |
垂直制表符 |
xhh |
十六进制值hh 的字符 |
ooo |
八进制值为ooo 的字符 |
|