4

Python 的字符串和相关函数

 3 years ago
source link: https://zhiqiang.org/coding/python-str.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK