Python Note 400 - String#

:date: 2017-02-13
:modified: 2022-05-31
:slug: python-note-400-string
:tags: python, note, string
:category: Development
:author: Dormouse Young
:summary: Python note series 400 - string

函数#

  • capitalize() 首字符大写

  • center(width) 返回一个原字符串居中,并使用空格填充至长度 width 的新字串

  • count(str, beg=0, end=len(string)) 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数

  • decode(encoding=‘UTF-8’, errors=‘strict’) 以 encoding 指定的编码格式解码string ,如果出错默认报一个 ValueError 的异常 ,除非 errors 指定的是 ‘ignore’ 或者 ‘replace’

  • encode(encoding=‘UTF-8’, errors=‘strict’) 以 encoding 指定的编码格式编码string,如果出错默认报一个 ValueError 的异常,除非 errors 指定的是 ‘ignore’ 或者 ‘replace’

  • endswith(obj, beg=0, end=len(string)) 检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束 ,如果是,返回 True ,否则返回 False.

  • expandtabs(tabsize=8) 把字符串string中的tab符号转为空格,默认的空格数tabsize是 8.

  • find(str, beg=0, end=len(string)) 检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内 ,如果是返回开始的索引值,否则返回-1

  • index(str, beg=0, end=len(string)) 跟find()方法一样,只不过如果str不在 string中会报一个异常.

  • isalnum() 如果 string 至少有一个字符并且所有字符都是字母或数字则返回True,否则返回 False

  • isalpha() 如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False

  • isdecimal() 如果 string 只包含十进制数字则返回True 否则返回 False.

  • isdigit() 如果 string 只包含数字则返回 True 否则返回 False.

  • islower() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都 是小写,则返回True,否则返回 False

  • isnumeric() 如果 string 中只包含数字字符,则返回True,否则返回 False

  • isspace() 如果 string 中只包含空格,则返回True,否则返回 False.

  • istitle() 如果 string 是标题化的(见 title())则返回 True,否则返回 False

  • isupper() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都 是大写,则返回True,否则返回 False

  • join(seq) Merges (concatenates)以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合 并为一个新的字符串

  • ljust(width) 返回一个原字符串左对齐,并使用空格填充至长度width 的新字符串

  • lower() 转换 string 中所有大写字符为小写

  • lstrip() 截掉 string 左边的空格.

  • string.partition(str) 有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把字符 串string分 成一个3元素的元组(string_pre_str,str,strig_post_str),如果 string中不包含str则string_pre_str == string.

  • replace(str1, str2,num=string.count(str1)) 把 string中的str1替换成str2,如果num指定,则替换不超过 num 次.

  • rfind(str, beg=0,end=len(string)) 类似于 find()函数,不过是从右边开始查找.

  • rindex( str, beg=0,end=len(string)) 类似于 index(),不过是从右边开始.

  • rjust(width) 返回一个原字符串右对齐,并使用空格填充至长度width 的新字符串

  • rpartition(str) 类似于 partition()函数,不过是从右边开始查找.

  • rstrip() 删除 string 字符串末尾的空格.

  • split(str=””, num=string.count(str)) 以 str 为分隔符切片string,如果num有指定值,则仅分隔num个子字符串

  • splitlines(num=string.count(‘\n’)) 按照行分隔,返回一个包含各行作为元素的列表,如果num指定则仅切片 num 个行.

  • startswith(obj, beg=0,end=len(string)) 检查字符串是否是以 obj 开头,是则返回True,否则返回 False。如果beg 和 end 指定值 ,则在指定范围内检查.

  • strip([obj]) 在string 上执行 lstrip()和 rstrip().

  • swapcase() 翻转 string 中的大小写

  • title() 返回“标题化”的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())

  • translate(str, del=””) 根据 str 给出的表(包含 256 个字符)转换 string 的字符,要过滤掉的字符放到 del 参数中

  • upper() 转换 string 中的小写字母为大写

  • zfill(width) 返回长度为width的字符串,原字符串 string 右对齐,前面填充0

字符串的替换#

replace#

replace 是内置函数或者方法,其原型为:s.replace(old, new, count=-1, /)

[1]:
# 替换前两个空格。
s = 'one two one two one'
print(s.replace(' ', '-', 2))
one-two-one two one
[2]:
# 字符串本身不会改变
s
[2]:
'one two one two one'
[3]:
# 链式调用
s.replace('one', '111').replace('two', '222')
[3]:
'111 222 111 222 111'

translate#

translate 是内置函数或者方法,其原型为:s.translate(table, /) 。用于单个字的,一对一或者一对多的替换。

[4]:
# 一对一
s = 'one two one two one'
s.translate(str.maketrans({'o': 'i', 't': 'f'}))
[4]:
'ine fwi ine fwi ine'
[5]:
# 一对多
s = '一 二 一 二'
s.translate(str.maketrans({'一': 'one', '二': None}))
# XXXne wXXX XXXne wXXX XXXne
[5]:
'one  one '
[6]:
# 字母表替换,第一个参数和第二参数一一对应,第三个参数是要删除的字母
s = 'one two one two one'
s.translate(str.maketrans('ow', 'XY', 'ne'))
[6]:
'X tYX X tYX X'

正则表达式#

更多内容参见:https://docs.python.org/3/library/re.html#re.sub

[7]:
import re

s = 'aaa@xxx.com bbb@yyy.com ccc@zzz.com'
re.sub('@[a-z]*.com', '@my.com', s, 2)
[7]:
'aaa@my.com bbb@my.com ccc@zzz.com'
[8]:
# subn 返回一个无组,元组第一个元素是被替换的字符串,第二个是替换的数量
s = 'aaa@xxx.com bbb@yyy.com ccc@zzz.com'
re.subn('@[a-z]*.com', '@my.com', s)
[8]:
('aaa@my.com bbb@my.com ccc@my.com', 3)