1、一些细节介绍
1.1、字符串编码
在 Python3 以上,通常说的字符串是指unicode
字符串,以下将不再重复强调。
1.2、转义和 r 前缀禁止转义
字符串里的\
表示转义,比如下面的s1
,表示一个换行符,实际只有一个字符:
s1 = "\n"
assert(len(s1) == 1)
我们可以用r
前缀来取消\
的转义,比如下面的s2
,它就是真正的"\n"
,有两个字符:
s2 = r"\n"
assert len(s2) == 2
assert s2 == "\\n"
1.3、Python 三引号
三引号的语法是一对连续的单引号或者双引号(通常都是成对的用)。Python 中三引号可以将复杂的字符串进行赋值。
Python 三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。
s3 = """我换行了。
我是下一行"""
s4 = '''三个单引号也可以。'''
1.4、格式化
Python 的字符串支持三种格式化方法。第一种是普通的%
,语法类似于C++
的printf
,使用%
锡类转义符,和C++
通用:
s5 = "%s is %d years old" % ("junbao", 6)
第二种是format
函数,类似于C++
的std::format
(或者fmt::format
):
s6 = "{} is {age:d} years old".format("junbao", age=6)
第三种是一种语法糖,结合了format
和变量,写法更简洁:
name = "junbao"
age = 6
s7 = f"{name} is {age:d} years old"
2、大小写相关
string.capitalize()
第一个字符大写。string.swapcase()
翻转大小写。string.upper()
都转为大写。string.lower()
都转为小写。string.title()
返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写。
3、查找和替换
string.startswith(obj,beg=0)
:检查字符串是否以指定字符串开头,string.endswith(obj,end=len(string))
:检查字符串是否以指定字符串结尾。string.count(str,beg,end)
:返回出现次数。string.find(str,beg,end)
:查找位置,没找到返回-1。string.index(str,beg,end)
:查找位置,没找到会抛出异常。string.find(str,beg,end)
:从结尾查找位置,没找到返回-1。string.index(str,beg,end)
:从结尾查找位置,没找到会抛出异常。string.replace(str1, str2, num)
:替换指定字符串,次数不超过num
次。
4、分割和连接
string.split(sep,num)
:按照制定字符分割,默认按照空字符(包括空格、换行、制表符等)分割。最多返回 num+1 个字符串。string.splitlines(keepends=False)
:按行分割。keepends 表示是否保留结尾的换行符。string.partition(str)
:根据 str 分割,返回三元组(str_left, str, str_right)
。iter.jion(str)
:用 str 将各个值连接起来。split
的反向操作。
5、字符串填充和去除
string.rjust(width, fillchar=' ')
: 左边填充,直到长度等于width
。string.center(width, fillchar=' ')
: 两边填充,直到长度等于width
。string.zfill(width)
:等价于string.rjust(width, '0')
。string.ljust(width, fillchar=' ')
: 右边填充,直到长度等于width
。string.lstrip(chars=' \n')
:去掉左边的指定字符。string.lstrip(chars=' \n')
:去掉右边的指定字符。string.strip(chars=' \n')
:去掉两边的指定字符。
6、字符类型
以下函数如果string
为空,总是返回False
。
string.isspace()
:是否为空字符,包括空格、换行符、制表符。string.isalpha()
:是否都是字母。string.isdecimal()
:是否都是 0 到 9 的 ASCII 数字,是通常认识的数字概念。string.isdigit()
:是否为数字,包括单字节和全角数字,但不包括汉字数字、罗马数字!string.isnumeric()
:是否都是数字,包括汉字数字、全角数字、罗马数字。string.isalnum()
:是否都是字母或数字(包括汉字数字等)。string.isupper()
:是否都是大写。string.istitle()
:每个单词都是否为首字母大写。
简单遍历字符,可看出 decimal, digit 和 numeric 的区别:
import itertools
decimals = ""
digits = ""
numerics = ""
for number in itertools.chain(range(1000), range(4969, 4978), range(8304, 11000)):
char = chr(number)
if char.isdecimal():
decimals += char
if char.isdigit():
digits += char
if char.isnumeric():
numerics += char
print("decimals =", decimals)
print("digits =", digits)
print("numerics =", numerics)
输出结果为:
decimals = 0123456789
digits = 0123456789²³¹፩፪፫፬፭፮፯፰፱⁰⁴⁵⁶⁷⁸⁹₀₁₂₃₄₅₆₇₈₉①②③④⑤⑥⑦⑧⑨⑴⑵⑶⑷⑸⑹⑺⑻⑼⒈⒉⒊⒋⒌⒍⒎⒏⒐⓪⓵⓶⓷⓸⓹⓺⓻⓼⓽⓿❶❷❸❹❺❻❼❽❾➀➁➂➃➄➅➆➇➈➊➋➌➍➎➏➐➑➒
numerics = 0123456789²³¹¼½¾፩፪፫፬፭፮፯፰፱⁰⁴⁵⁶⁷⁸⁹₀₁₂₃₄₅₆₇₈₉⅐⅑⅒⅓⅔⅕⅖⅗⅘⅙⅚⅛⅜⅝⅞⅟ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅬⅭⅮⅯⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⅼⅽⅾⅿↀↁↂↅↆↇↈ↉①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛⓪⓫⓬⓭⓮⓯⓰⓱⓲⓳⓴⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾⓿❶❷❸❹❺❻❼❽❾❿➀➁➂➃➄➅➆➇➈➉➊➋➌➍➎➏➐➑➒➓
7、编码相关
string.encode()
:转为二进制字符串。bytes.decode()
:二进制字符串转为字符串。
Q. E. D.