'hello'*3 # 重复 hello 三次
'hello' + 'world' # 连接字符串
('hello' # 字符串分行
'world')
str(obj) # 调用对象的 __str__ 方法,返回一个字符串
原始字符串
ASCII 中的字符和 RE 中的特殊字符可能出现冲突,比如\b
在ASCII中表示退格,在 RE 中表示单词边界。
为了让 python 不将\b
作为退格,RE 中使用\\b
,\\
将\
转化为普通字符,这样 python 就不会去转义字符 b 了,而 RE 就会来解释这个\b
。
所以 RE 中表示一个普通\
,需要使用\\\\
。
原始字符串就是希望 python 不解释\
,所有\
都是普通字符,而这个普通字符会被 RE 解释。
r'\\'
表示两个 ASCII 中的普通字符\
。
有一个情况很奇怪,如果我希望字符串中的所有\
都是普通字符,r'C:\Users\kinux\Music\music\'
,这是有问题的。最后一个\
会转义'
,不清楚为什么。所以正确的写法是C:\\Users\\kinux\\Music\\music\\
,不使用原始字符串。
字符串格式化与拼接
C语言风格的格式化
虽然这种风格已经不推荐使用了,但是在别的语言中还会遇到,而且我不熟练,所以记一下
# 只需要记得常用的 %d,%s,%f 即可,这里用 %s 举例
# 保留小数点后 4 位,不够的用 0 补足,超过的话就四舍五入
print("%.*f" % (4, 1.2))
# 保留小数点后 4 位;字符串总长度 10,不够在左边用空格补足,超过的话不会截断
print("%10.4f" % (1.234567))
rjust/ljust/center
# 把字符创扩充到 20 个字符,不够的用 = 补足,超过的话不会截断;原字符串位于新子串的右边
'hello'.rjust(20,'=')
# '===============hello'
format方法格式化
format 可以接受任意类型的参数,但返回的一定是字符串
两个{,两个%,可以用来转义,比如{{
表示一个没有特殊意义的{
# 简单用法
name='Jerry'
age=12
print('{},{}'.format(name,age))
print('{0[1]},{0[2]}'.format([name,age]))
print('{name},{age}'.format(name=name,age=age))
# 数字精度与进制
print('{:.2f}'.format(31.31412))
# 以二进制的形式打印
# 如果不加#,字符串开头就不会有 0b
print('{:#b}'.format(23))
# 八进制、十进制、十六进制分别是 o、d、x
# 对齐
# 中间对其,字符串总长度 10
print('{:^10}'.format('abc'))
# 左对齐,用 =,而不是空白来填充
print('{0:=<10}'.format(1.234))
# 其它
# 给数字加千位分隔符,每三个数字加一个逗号,用在表示金额的数字上
print('{:,}'.format(123456789))
# 转换成百分比,保留四位小数
print('{:.4%}'.format(0.1))
字符串拼接
- +:用于最简单的字符串连接
- join(seq) 方法:以指定字符串作为分隔符,将 seq 中所有的元素合并为一个新的字符串
- format 方法
字符串搜索与替换
这些方法都不支持正则表达式
endswith(suffix, beg=0, end=len(string)) # 返回的是一个 bool
startswith(str, beg=0,end=len(string))
find(str, beg=0 end=len(string)) # 存在则返回下标,不存在返回 -1
rfind(str, beg=0,end=len(string)) # 同上,但是是从右边开始搜索
index(str, beg=0, end=len(string)) # 同上,但是不存在则抛出异常
rindex( str, beg=0, end=len(string))
count(str, beg= 0,end=len(string)) # 返回指定字符串出现的次数
replace(old, new [, max])
字符串判断与转换
# 这些判断都要求字符串长度大于 0,否则直接返回 False
isspace()
islower()
isupper()
isalpha() # 字母
isdigit() # 数字
isalnum() # 字母或数字
split(str="", maxsplit=-1) # maxsplit表示要做几次分割,比如做一次,则会把原字符串切成两个
# 按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
splitlines([keepends])
upper()
lower()
strip() # 去字符串首尾空格
lstrip()
rstrip()
encode('utf8') # 用 utf8 把字符串编码成字节(Bytes 类型对象)
# 用 Bytes 类型对象的 decode 方法可还原
网友评论