请稍候,加载中....

字符串内置方法

字符串类型继承自object

字符串实例方法通过字符串类型实例s调用,其方法包含字符串大小写相关方法、编码方法、字符串格式化、字符串分割、字符串查找等

字符串大小写相关

方法名 描述
s.capitalize()
# 返回原字符串的副本,其首个字符大写,其余为小写。
s = "Python-XP.com是一个交互式学习python编程站点"
print(s.capitalize())
s.casefold() 返回原字符串消除大小写的副本。 消除大小写的字符串可用于忽略大小写的匹配。 消除大小写类似于转为小写,但是更加彻底一些,因为它会移除字符串中的所有大小写变化形式。 例如,德语小写字母 'ß' 相当于 "ss"。 由于它已经是小写了,lower() 不会对 'ß' 做任何改变;而 casefold() 则会将其转换为 "ss
s.istitle()

如果字符串中至少有一个字符且为标题字符串则返回真值,例如大写字符之后只能带非大写字符而小写字符必须有大写字符打头。 否则返回假值。

# s.istitle - 至少有一个大写字符或者大写字符开头
s1 = "Python-XP.com是一个交互式学习python编程站点"
s2 = "python-XP.com是一个交互式学习python编程站点"
print(s1.istitle())
print(s2.istitle())
s.isupper() 如果字符串中至少有一个区分大小写的字符 , 具此类字符均为大写则返回真值,否则返回假值。
# 是否全为大写字符
s = "上python-xp.com, 轻松学python编程"
print(s.isupper())
s.islower() 字符串中至少有一个可以区分大小写的字符 ,且此类字符均为小写则返回真值,否则返回假值。
# 是否全为小写字符
s = "上python-xp.com, 轻松学python编程"
print(s.islower())
s.lower() 返回原字符串的副本,其所有区分大小写的字符,均转换为小写。
# 将字符串中小写的字母转换为大写
s1 = "Python-XP.com是一个交互式学习python编程站点"
print(s1.lower())
s.upper() 返回原字符串的副本,其中所有区分大小写的字符,均转换为大写。 请注意如果 s 包含不区分大小写的字符或者如果结果字符的 Unicode 类别不是 "Lu" (Letter, uppercase) 而是 "Lt" (Letter, titlecase) 则 s.upper().isupper() 有可能为 False
s1 = "Python-XP.com是一个交互式学习python编程站点"
print(s1.upper())
s.title() 返回原字符串的标题版本,其中每个单词第一个字母为大写,其余字母为小写。
# 返回字符串的标题版本,首字母大写
'Hello world'.title()

该算法使用一种简单的与语言无关的定义,将连续的字母组合视为单词。 该定义在多数情况下都很有效,但它也意味着代表缩写形式与所有格的撇号也会成为单词边界,这可能导致不希望的结果

# 空格与撇号都是单词分隔符,后面的字母转为大写
"they're bill's friends from the UK".title()
s.swapcase() 返回原字符串的副本,其中大写字符转换为小写,反之亦然。 请注意 s.swapcase().swapcase() == s并不一定为真值。

字符串数字判别

s.isalnum()
# isalnum() - 如果字符串由字母与数字组成返回True
"a10b".isalnum()
# True

"10.10".isalnum()
# False
s.isalpha()

字母类字符是在 Unicode 字符数据库中被定义为 "Letter" 的字符,即一般分类特征属性为 "Lm", "Lt", "Lu", "Ll" 或 "Lo" 其中之一。 请注意这不同于 Unicode 标准所定义的 "Alphabetic" 特征属性。

# isalpha() - 如果字符串至少有一个字符且所有字符均为字母则返回真值,否则返回假值。
s = "Python-XP.com"
print(s.isalpha())
s = "Python-XP.com, 轻松学python"
print(s.isalpha())
s.isascii()
# isascii() 如果字符串为空或所有字符均为 ASCII 字符则返回真值,否则返回假值。 ASCII 字符的码位范围为 U+0000-U+007F。

s = "Python-XP.com"
print(s.isascii())
s.isdecimal()
# isdecimal()-如果字符串中至少有一个字符且所有字符均为十进制数字符则返回真值,否则返回假值。
s = "10.0"
print(s.isdecimal())
s = "10.0元"
print(s.isdecimal())
s = "0xff"
print(s.isdecimal())
十进制数字符是以 10 为基数的计数制会用来组成数值的字符,例如 U+0660, ARABIC-INDIC DIGIT ZERO。 正式的定义为:十进制数字符就是 Unicode 一般分类 "Nd" 中的字符。
 
s.isdigit() 如果字符串中至少有一个字符且所有字符均为数字字符则返回真值,否则返回假值。 数字字符包括十进制数字符和需要特别处理的数字,例如兼容性上标数字。 这也涵盖了不能被用来组成以 10 为基数的数值的数字,例如 Kharosthi 数字。 正式的定义为:数字字符就是特征属性值 Numeric_Type=Digit 或 Numeric_Type=Decimal 的字符。
# isdigit() - 如果字符串中至少有一个字符且所有字符均为数字字符则返回真值,否则返回假值。
# 如果isdecimal为True的字符,则isdigit也为True,反之不一定
s = "10.0"
print(s.isdigit())
s = "0xFF"
print(s.isdigit())
s = "10.0元"
print(s.isdigit())
s.isnumeric() 如果字符串中至少有一个字符且所有字符均为数值字符则返回真值,否则返回假值。 数值字符包括数字字符,以及所有在 Unicode 中设置了数值特性属性的字符,例如 U+2155, VULGAR FRACTION ONE FIFTH。 正式的定义为:数值字符就是具有特征属性值 Numeric_Type=Digit, Numeric_Type=Decimal 或 Numeric_Type=Numeric 的字符。
# isnumeric() - 如果字符串中至少有一个字符且所有字符均为数值字符则返回真值,否则返回假值
s = "10.0"
print(s.isnumeric())
s = "0xFF"
print(s.isnumeric())
s = "10.0元"
print(s.isnumeric())
   

字符串查找

方法名 描述
s.center(width[, fillchar]) 返回长度为 width 的字符串,原字符串在其正中。 使用指定的 fillchar 填充两边的空位(默认使用 ASCII 空格符)。 如果 width 小于等于 len(s) 则返回原字符串的副本。
# center() - 将字符串使用指定字符填充返回指定长度
s = "Python-XP.com"
print(s.center(100, "*"))
s.count(sub[, start[, end]]) 返回子字符串 sub 在 [start, end] 范围内非重叠出现的次数。 可选参数 start 与 end 会被解读为切片表示法。
# count() - 返回子字符串 sub 在 [start, end] 范围内非重叠出现的次数
s = "轻松学python就上python-xp.com"
print(s.count("python", 0))
s.startswith(prefix[, start[, end]])

如果字符串以指定的 prefix 开始则返回 True,否则返回 False。 prefix 也可以为由多个供查找的前缀构成的元组。 如果有可选项 start,将从所指定位置开始检查。 如果有可选项 end,将在所指定位置停止比较。

# 如果字符串以指定的 prefix 开始则返回 True,否则返回 False
s1 = "luxp.jpeg"
s2 = "Luxp.png"
print(s1.startswith("luxp"))
print(s2.startswith("luxp"))
s.endswith(suffix[, start[, end]])

如果字符串末尾以指定的 suffix 结束返回 True,否则返回 False

  • suffix 也可以为由多个查找的后缀构成的元组。
  • 如果有可选项 start,将从所指定位置开始检查。
  • 如果有可选项 end,将在所指定位置停止比较。
# 如果字符串末尾以指定的 suffix 结束返回 True,否则返回 False。
s1 = "luxp.jpeg"
s2 = "Luxp.png"
print(s1.endswith("jpeg"))
print(s2.endswith("png"))
s.find(sub[, start[, end]]) 返回子字符串 sub 在 s[start:end] 切片内被找到的最小索引。 可选参数 start 与 end 会被解读为切片表示法。 如果 sub 未被找到则返回 -1
# find() 方法应该只在你需要知道 sub 所在位置时使用。 要检查 sub 是否为子字符串,请使用 in操作符:
# 未找到子字符串,返回-1,而不是0,切记。
print('Python-XP.com'.find('XP'))
s.index(sub[, start[, end]])
# 类似于 find(),但在找不到子类时会引发 ValueError。
print('Python-XP.com'.index('.net'))
s.rfind(sub[, start[, end]])

返回子字符串 sub 在字符串内被找到的最大(最右)索引,这样 sub 将包含在 s[start:end] 当中。 可选参数 start 与 end 会被解读为切片表示法。 如果未找到则返回 -1

# rfind() - 返回子字符串 sub 在字符串内被找到的最大(最右)索引
s = "轻松学python,就上python-xp.com"
print(s.rfind("python"))
s.rindex(sub[, start[, end]])
# rindex() 类似于 rfind(),但在子字符串 sub 未找到时会引发 ValueError。
s = "轻松学python,就上python-xp.com"
print(s.rfind("java"))
s.rjust(width[, fillchar])

返回长度为 width 的字符串,原字符串在其中靠右对齐。 使用指定的 fillchar 填充空位 (默认使用 ASCII 空格符)。 如果 width 小于等于 len(s) 则返回原字符串的副本。

# rjust() 类似center(), 返回长度为 width 的字符串,原字符串在其中靠右对齐
s = "Python-XP.com"
print(s.rjust(100, "-"))
s.ljust(width[, fillchar]) 返回长度为 width 的字符串,原字符串在其中靠左对齐。 使用指定的 fillchar 填充空位 (默认使用 ASCII 空格符)。 如果 width 小于等于 len(s) 则返回原字符串的副本。

 

字符串分割与拼接

s.split(sep=Nonemaxsplit=-1)

返回一个由字符串内单词组成的列表,使用 sep 作为分隔字符串。 如果给出了 maxsplit,则最多进行 maxsplit 次拆分(因此,列表最多会有 maxsplit+1 个元素)。 如果 maxsplit 未指定或为 -1,则不限制拆分次数(进行所有可能的拆分)。

如果给出了 sep,则连续的分隔符不会被组合在一起而是被视为分隔空字符串 (例如 '1,,2'.split(',')将返回 ['1', '', '2'])。 sep 参数可能由多个字符组成 (例如 '1<>2<>3'.split('<>') 将返回 ['1','2', '3'])。 使用指定的分隔符拆分空字符串将返回 ['']

如果 sep 未指定或为 None,则会应用另一种拆分算法:连续的空格会被视为单个分隔符,其结果将不包含开头或末尾的空字符串,如果字符串包含前缀或后缀空格的话。 因此,使用 None 拆分空字符串或仅包含空格的字符串将返回 []

# split() - 分割字符串
# 默认空格
'1 2 3'.split()
'luxp'.split()

# maxsplit控制分片数量
# 示例为分割1次
'1 2 3'.split(maxsplit=1)

# 忽略两端空白字符
'   1   2   3   '.split()
['1', '2', '3']
s.splitlines([keepends])

返回由原字符串中各行组成的列表,在行边界的位置拆分。 结果列表中不包含行边界,除非给出了 keepends 且为真值。
 

# splitlines() - 返回由原字符串中各行组成的列表
"a\nb\n".splitlines()
# ['a', 'b']

# 包含行边界
"a\nb\n".splitlines(True)
['a\n', 'b\n']

# 空字符串
"".splitlines() 
[]

此方法会以下列行边界进行拆分。 特别地,行边界是 universal newlines 的一个超集。

表示符 描述
\n 换行
\r 回车
\r\n 回车 + 换行
\v 或 \x0b 行制表符
\f 或 \x0c 换表单
\x1c 文件分隔符
\x1d 组分隔符
\x1e 记录分隔符
\x85 下一行 (C1 控制码)
\u2028 行分隔符
\u2029 段分隔符
s.rsplit(sep=Nonemaxsplit=-1) 返回一个由字符串内单词组成的列表,使用 sep 作为分隔字符串。 如果给出了 maxsplit,则最多进行 maxsplit 次拆分,从 最右边 开始。 如果 sep 未指定或为 None,任何空白字符串都会被作为分隔符。 除了从右边开始拆分,rsplit() 的其他行为都类似于 split()
s.partition(sep) 在 sep 首次出现的位置拆分字符串,返回一个 3 元组,其中包含分隔符之前的部分、分隔符本身,以及分隔符之后的部分。 如果分隔符未找到,则返回的 3 元组中包含字符本身以及两个空字符串。
# partition(sep) - 在 sep 首次出现的位置拆分字符串,返回一个 3 元组,其中包含分隔符之前的部分、分隔符本身,以及分隔符之后的部分
'www.python-xp.com'.partition('.')
# ('www', '.', 'python-xp.com')
s.rpartition(sep) 在 sep 最后一次出现的位置拆分字符串,返回一个 3 元组,其中包含分隔符之前的部分、分隔符本身,以及分隔符之后的部分。 如果分隔符未找到,则返回的 3 元组中包含两个空字符串以及字符串本身。
s.join(iterable) 返回一个由 iterable 中的字符串拼接而成的字符串。 如果 iterable 中存在任何非字符串值包括 bytes 对象则会引发 TypeError。 调用该方法的字符串将作为元素之间的分隔。
# join() - 返回一个由 iterable 中的字符串拼接而成的字符串

lists = ["l","u","x","p"] 

"".join(lists)
# 输出 luxp

"|".join(lists) 
# 输出 l|u|x|p

字符串替换与格式化

方法名 描述
s.expandtabs(tabsize=8)

返回字符串的副本,其中所有的制表符会由一个或多个空格替换,具体取决于当前列位置和给定的制表符宽度。

  • 每 tabsize 个字符设为一个制表位(一个tab相当于几个空格)。
  • 要展开字符串,当前列将被设为零并逐一检查字符串中的每个字符。
  • 如果字符为制表符 (\t),则会在结果中插入一个或多个空格符,直到当前列等于下一个制表位。 (制表符本身不会被复制。)
  • 如果字符为换行符 (\n) 或回车符 (\r),它会被复制并将当前列重设为零。
  • 任何其他字符会被不加修改地复制并将当前列加一,不论该字符在被打印时会如何显示。
# expandtabs(tabsize) - 返回字符串的副本,其中所有的制表符会由一个或多个空格替换.
# tabsize默认为8,一个\t转换为8个空格
'01\t012\t0123\t01234'.expandtabs()
'01      012     0123    01234'
# 指定tabsize
'01\t012\t0123\t01234'.expandtabs(4)
'01  012 0123    01234'
s.format(*args**kwargs) 执行字符串格式化操作。 调用此方法的字符串可以包含字符串字面值或者以花括号 {} 括起来的替换域。 每个替换域可以包含一个位置参数的数字索引,或者一个关键字参数的名称。 返回的字符串副本中每个替换域都会被替换为对应参数的字符串值。
# format() - 执行字符串格式化操作。 调用此方法的字符串可以包含字符串字面值或者以花括号 {} 括起来的替换域
# 按顺序args
"The sum of 1 + 2 is {0}".format(1+2)
"The sum of {0} + {1} is {2}".format(1, 2, 1+2)

# 按kwargs
"The sum of {num1} + {num2} is {num3}".format(num1=1, num2=2, num3=1+2)
s.format_map(mapping)

类似于 str.format(**mapping),不同之处在于 mapping 会被直接使用而不是复制到一个 dict。 适宜使用此方法的一个例子是当 mapping 为 dict 的子类的情况:

# format_map() - 类似format(**mapping)
dicts = {
    "author": "luxp",
    "web": "python-xp"
}
"{web} 是 {author} 创建的".format_map(dicts)

# 可以自定义一个map类
# Default类增加了一个缺失键处理方法
class Default(dict):
    def __missing__(self, key):
        return key 

# 缺少country键,直接返回了键名
'{name} was born in {country}'.format_map(Default(name='Guido'))
# 'Guido was born in country'
s.lstrip([chars]) 返回原字符串的副本,移除其中的前导字符。 chars 参数为指定要移除字符的字符串。 如果省略或为 None,则 chars 参数默认移除空格符。 实际上 chars 参数并非指定单个前缀;而是会移除参数值的所有组合:
# lstrip() - 移除字符串前导字符
# 默认为空格
# 类似还有rstrip、strip方法

'   luxp   '.lstrip()
# 'luxp   '
'www.python-xp.com'.lstrip('www.')
# 'python.com'
s.rstrip([chars]) 返回原字符串的副本,移除其中的末尾字符。 chars 参数为指定要移除字符的字符串。 如果省略或为 None,则 chars 参数默认移除空格符。 实际上 chars 参数并非指定单个后缀;而是会移除参数值的所有组合
s.strip([chars]) 返回原字符串的副本,移除首尾字符。 chars 参数为指定要移除字符的字符串。 如果省略或为 None,则 chars 参数默认移除空格符。 实际上 chars 参数并非指定单个后缀;而是会移除参数值的所有组合
s.replace(oldnew[, count])

返回字符串的副本,其中出现的所有子字符串 old 都将被替换为 new。 如果给出了可选参数 count,则只替换前 count 次出现。

# replace() - 替换子字符串
s = "Python-XP.com是一个专门学习java编程的网站"
# 将java更换为python
s.replace("java", "python")

s.zfill(width)

返回原字符串的副本,在左边填充 ASCII '0' 数码使其长度变为 width。 正负值前缀 ('+'/'-') 的处理方式是在正负符号 之后 填充而非在之前。 如果 width 小于等于 len(s) 则返回原字符串的副本。

# zfill() - 使用0填充字符串到指定长度
"42".zfill(5)
# '00042'
"-42".zfill(5)
# "-0042".zfill(5)

字符串编码

方法名 描述
s.encode(encoding="utf-8", errors="strict")

返回原字符串编码为字节串对象的版本。 默认编码为 'utf-8'。 可以给出 errors 来设置不同的错误处理方案。

errors 的默认值为 'strict',表示编码错误会引发 UnicodeError。

其他可用的值为 'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 以及任何其他通过 codecs.register_error() 注册的值,请参阅 Error Handlers 小节。 要查看可用的编码列表,请参阅 标准编码 小节。

# encode() - 将字符串编码为字节对象
# decode用于将字节解码为字符串,并不是字符串方法
# 默认编码为utf-8
print("Python-XP.com".encode())
print("我爱编程-平哥".encode())

# 将字节解码
print("我爱编程-平哥".encode().decode())

其他方法

方法名 描述
s.isidentifier()

如果字符串根据语言定义属于有效的标识符则返回真值,参见 标识符和关键字。需要额外使用 keyword.iskeyword() 来检测保留标识符,例如 def 和 class

s.isprintable() 如果字符串中所有字符均为可打印字符或字符串为空则返回真值,否则返回假值。 不可打印字符是在 Unicode 字符数据库中被定义为 "Other" 或 "Separator" 的字符,例外情况是 ASCII 空格字符 (0x20) 被视作可打印字符。 (请注意在此语境下可打印字符是指当对一个字符串发起调用 repr() 时不必被转义的字符。 它们与字符串写入 sys.stdout 或 sys.stderr 时所需的处理无关。)
s.isspace() 如果字符串中至少有一个字符且所有字符均为空白字符则返回真值,否则返回假值。 空白字符是在 Unicode 字符数据库中被定义为 "Other" 或 "Separator" 并且其双向特征属性为 "WS", "B" 或 "S" 之一的字符。
s.translate(table)

返回原字符串的副本,其中每个字符按给定的转换表进行映射。 转换表必须是一个使用 __getitem__() 来实现索引操作的对象,通常为 mapping 或 sequence。 当以 Unicode 码位序号(整数)为索引时,转换表对象可以做以下任何一种操作:返回 Unicode 序号或字符串,将字符映射为一个或多个字符;返回 None,将字符从结果字符串中删除;或引发 LookupError 异常,将字符映射为其自身。

你可以使用 str.maketrans() 基于不同格式的字符到字符映射来创建一个转换映射表。

static str.maketrans(x[, y[, z]])
# static str.maketrans(x, [, y[, z]])

此静态方法返回一个可供 str.translate() 使用的转换对照表。

如果只有一个参数,则它必须是一个将 Unicode 码位序号(整数)或字符(长度为 1 的字符串)映射到 Unicode 码位序号、(任意长度的)字符串或 None 的字典。 字符键将会被转换为码位序号。

如果有两个参数,则它们必须是两个长度相等的字符串,并且在结果字典中,x 中每个字符将被映射到 y 中相同位置的字符。

如果有第三个参数,它必须是一个字符串,其中的字符将在结果中被映射到 None

   

Python学习手册-