注意,python中 字符串是不可变对象 ,所以所有修改和生成字符串的操作的实现方法都是另一个内存片段中新生成一个字符串对象。例如, 'abc'.upper() 将会在划分另一个内存片段,并将返回的 ABC 保存在此内存中。

下文出现的"S"表示待操作的字符串。本文没有对 casefold,encode,format,format_map 进行介绍,前两者和unicode有关,后两者内容有点太多。

1.大小写转换

1.1 lower、upper

S.lower()
S.upper()

返回S字符串的小写、大写格式。(注意,这是新生成的字符串,在另一片内存片段中,后文将不再解释这种行为)

例如:

>>> print('ab XY'.lower())
ab xy
>>> print('ab XY'.upper())
AB XY

1.2 title、capitalize

S.title()
S.capitalize()

前者返回S字符串中所有单词首字母大写且其他字母小写的格式,后者返回首字母大写、其他字母全部小写的新字符串。

例如:

>>> print('ab XY'.title())
Ab Xy
>>> print('abc DE'.capitalize())
Abc de

1.3 swapcase

S.swapcase()

swapcase() 对S中的所有字符串做大小写转换(大写-->小写,小写-->大写)。

>>> print('abc XYZ'.swapcase())
ABC xyz

2.isXXX判断

2.1 isalpha,isdecimal,isdigit,isnumeric,isalnum

S.isdecimal()
S.isdigit()
S.isnumeric()
S.isalpha()
S.isalnum()

测试字符串S是否是数字、字母、字母或数字。对于非Unicode字符串,前3个方法是等价的。

例如:

>>> print('34'.isdigit())
True
>>> print('abc'.isalpha())
True
>>> print('a34'.isalnum())
True

2.2 islower,isupper,istitle

S.islower()
S.isupper()
S.istitle()

判断是否小写、大写、首字母大写。要求S中至少要包含一个字符串字符,否则直接返回False。例如不能是纯数字。

注意, istitle() 判断时会对每个单词的首字母边界判断。例如, word1 Word2 、 word1_Word2 、 word1()Word2 中都包含两个单词,它们的首字母都是"w"和"W"。因此,如果用 istitle()去判断它们,将返回False,因为 w 是小写。

例如:

>>> print('a34'.islower())
True
>>> print('AB'.isupper())
True
>>> print('Aa'.isupper())
False
>>> print('Aa Bc'.istitle())
True
>>> print('Aa_Bc'.istitle())
True
>>> print('Aa bc'.istitle())
False
>>> print('Aa_bc'.istitle())
False# 下面的返回False,因为非首字母C不是小写
>>> print('Aa BC'.istitle())
False

2.3 isspace,isprintable,isidentifier

S.isspace()
S.isprintable()
S.isidentifier()

分别判断字符串是否是空白(空格、制表符、换行符等)字符、是否是可打印字符(例如制表符、换行符就不是可打印字符,但空格是)、是否满足标识符定义规则。

例如:

1.判断是否为空白。没有任何字符是不算是空白。

>>> print(' '.isspace())
True
>>> print(' \t'.isspace())
True
>>> print('\n'.isspace())
True
>>> print(''.isspace())
False
>>> print('Aa BC'.isspace())
False

2.判断是否是可打印字符。

>>> print('\n'.isprintable())
False
>>> print('\t'.isprintable())
False
>>> print('acd'.isprintable())
True
>>> print(' '.isprintable())
True
>>> print(''.isprintable())
True

3.判断是否满足标识符定义规则。
标识符定义规则为:只能是字母或下划线开头、不能包含除数字、字母和下划线以外的任意字符。

>>> print('abc'.isidentifier())
True
>>> print('2abc'.isidentifier())
False
>>> print('abc2'.isidentifier())
True
>>> print('_abc2'.isidentifier())
True
>>> print('_abc_2'.isidentifier())
True
>>> print('_Abc_2'.isidentifier())
True
>>> print('Abc_2'.isidentifier())
True

3.填充

3.1 center

S.center(width[, fillchar])

将字符串居中,左右两边使用fillchar进行填充,使得整个字符串的长度为width。fillchar默认为空格。如果width小于字符串的长度,则无法填充直接返回字符串本身(不会创建新字符串对象)。

例如:

1.使用下划线填充并居中字符串

>>> print('ab'.center(4,'_'))
_ab_
>>> print('ab'.center(5,'_'))
__ab_

2.使用默认的空格填充并居中字符串

>>> print('ab'.center(4))ab
>>> print(len('ab'.center(4)))
4

3.width小于字符串长度

>>> print('abcde'.center(3))
abcde

3.2 ljust和rjust

S.ljust(width[, fillchar])  S.rjust(width[, fillchar])

ljust() 使用fillchar填充在字符串S的右边,使得整体长度为width。 rjust() 则是填充在左边。如果不指定fillchar,则默认使用空格填充。

如果width小于或等于字符串S的长度,则无法填充,直接返回字符串S(不会创建新字符串对象)。

例如:

>>> print('xyz'.ljust(5,'_'))
xyz__
>>> print('xyz'.rjust(5,'_'))
__xyz

3.3 zfill

S.zfill(width)

用0填充在字符串S的左边使其长度为width。如果S前右正负号 +/- ,则0填充在这两个符号的后面,且符号也算入长度。

如果width小于或等于S的长度,则无法填充,直接返回S本身(不会创建新字符串对象)。

>>> print('abc'.zfill(5))
00abc>>> print('-abc'.zfill(5))
-0abc>>> print('+abc'.zfill(5))
+0abc>>> print('42'.zfill(5))
00042>>> print('-42'.zfill(5))
-0042>>> print('+42'.zfill(5))
+0042

4.子串搜索

4.1 count

S.count(sub[, start[, end]])

返回字符串S中子串sub出现的次数,可以指定从哪里开始计算(start)以及计算到哪里结束(end),索引从0开始计算,不包括end边界。

例如:

>>> print('xyabxyxy'.count('xy'))
3# 次数2,因为从index=1算起,即从'y'开始查找,查找的范围为'yabxyxy'
>>> print('xyabxyxy'.count('xy',1))
2# 次数1,因为不包括end,所以查找的范围为'yabxyx'
>>> print('xyabxyxy'.count('xy',1,7))
1# 次数2,因为查找的范围为'yabxyxy'
>>> print('xyabxyxy'.count('xy',1,8))
2

4.2 endswith和startswith

S.endswith(suffix[, start[, end]])
S.startswith(prefix[, start[, end]])

endswith() 检查字符串S是否已suffix结尾,返回布尔值的True和False。suffix可以是一个元组(tuple)。可以指定起始start和结尾end的搜索边界。

同理 startswith() 用来判断字符串S是否是以prefix开头。

例如:

1.suffix是普通的字符串时。

>>> print('abcxyz'.endswith('xyz'))
True# False,因为搜索范围为'yz'
>>> print('abcxyz'.endswith('xyz',4))
False# False,因为搜索范围为'abcxy'
>>> print('abcxyz'.endswith('xyz',0,5))
False
>>> print('abcxyz'.endswith('xyz',0,6))
True

2.suffix是元组(tuple)时,只要tuple中任意一个元素满足endswith的条件,就返回True。
# tuple中的'xyz'满足条件

>>> print('abcxyz'.endswith(('ab','xyz')))
True# tuple中'ab'和'xy'都不满足条件
>>> print('abcxyz'.endswith(('ab','xy')))
False# tuple中的'z'满足条件
>>> print('abcxyz'.endswith(('ab','xy','z')))
True

4.3 find,rfind和index,rindex

S.find(sub[, start[, end]])
S.rfind(sub[, start[, end]])¶
S.index(sub[, start[, end]])
S.rindex(sub[, start[, end]])

find()搜索字符串S中是否包含子串sub,如果包含,则返回sub的索引位置,否则返回"-1"。可以指定起始start和结束end的搜索位置。

index()和find()一样,唯一不同点在于当找不到子串时,抛出 ValueError 错误。

rfind()则是返回搜索到的最右边子串的位置,如果只搜索到一个或没有搜索到子串,则和find()是等价的。

同理rindex()。

例如:

>>> print('abcxyzXY'.find('xy'))
3
>>> print('abcxyzXY'.find('Xy'))
-1
>>> print('abcxyzXY'.find('xy',4))
-1>>> print('xyzabcabc'.find('bc'))
4
>>> print('xyzabcabc'.rfind('bc'))
7>>> print('xyzabcabc'.rindex('bcd'))
Traceback (most recent call last):File "<stdin>", line 1, in <module>
ValueError: substring not found

可以使用 in 操作符来判断字符串S是否包含子串sub,它返回的不是索引位置,而是布尔值。

>>> 'xy' in 'abxycd'
True
>>> 'xyz' in 'abxycd'
False

5.替换

5.1 expandtabs

S.expandtabs(N)

将字符串S中的 \t 替换为一定数量的空格。默认N=8。

注意, expandtabs(8) 不是将 \t 直接替换为8个空格。例如 'xyz\tab'.expandtabs() 会将\t 替换为5个空格,因为"xyz"占用了3个字符位。

另外,它不会替换换行符( \n 或 \r )时。

例如:

>>> '01\t012\t0123\t01234'.expandtabs(4)
'01  012 0123    01234'>>> '01\t012\t0123\t01234'.expandtabs(8)
'01      012     0123    01234'>>> '01\t012\t0123\t01234'.expandtabs(7)
'01     012    0123   01234'>>> print('012\t0123\n01234'.expandtabs(7))
012    0123
01234

5.2 translate和maketrans

S.translate(table)
static str.maketrans(x[, y[, z]])

str.maketrans() 生成一个字符一 一映射的table,然后使用 translate(table) 对字符串S中的每个字符进行映射。

如果你熟悉Linux,就知道tr命令,translate()实现的功能和tr是类似的。

例如,现在想要对"I love fairy"做一个简单的加密,将里面部分字符都替换为数字,这样别人就不知道转换后的这句话是什么意思。

>>> in_str='abcxyz'
>>> out_str='123456'# maketrans()生成映射表
>>> map_table=str.maketrans(in_str,out_str)# 使用translate()进行映射
>>> my_love='I love fairy'
>>> result=my_love.translate(map_table)
>>> print(result)
I love f1ir5

注意, maketrans(x[, y[, z]]) 中的x和y都是字符串,且长度必须相等。

如果 maketrans(x[, y[, z]]) 给定了第三个参数z,这这个参数字符串中的每个字符都会被映射为None。

例如,不替换"o"和"y"。

>>> in_str='abcxyz'
>>> out_str='123456'
>>> map_table=str.maketrans(in_str,out_str,'ay')
>>> my_love='I love fairy'
>>> result=my_love.translate(map_table)
>>> print(result)
I love fir

6.分割

6.1 partition和rpartition

S.partition(sep)
S.rpartition(sep)

搜索字符串S中的子串sep,并从sep处对S进行分割,最后返回一个包含3元素的元组:sep左边的部分是元组的第一个元素,sep自身是元组的二个元素,sep右边是元组的第三个元素。

partition(sep) 从左边第一个sep进行分割, rpartition(sep) 从右边第一个sep进行分割。

如果搜索不到sep,则返回的3元素元组中,有两个元素为空。partition()是后两个元素为空,rpartition()是前两个元素为空。

例如:

# 只搜索到一个sep时,两者结果相同
>>> print('abcxyzopq'.partition('xy'))
('abc', 'xy', 'zopq')
>>> print('abcxyzopq'.rpartition('xy'))
('abc', 'xy', 'zopq')# 搜索到多个sep时,分别从左第一个、右第一个sep分割
>>> print('abcxyzxyopq'.partition('xy'))
('abc', 'xy', 'zxyopq')
>>> print('abcxyzxyopq'.rpartition('xy'))
('abcxyz', 'xy', 'opq')# 搜索不到sep
>>> print('abcxyzxyopq'.partition('xyc'))
('abcxyzxyopq', '', '')
>>> print('abcxyzxyopq'.rpartition('xyc'))
('', '', 'abcxyzxyopq')

6.2 split、rsplit和splitlines

S.split(sep=None, maxsplit=-1)  S.rsplit(sep=None, maxsplit=-1)  S.splitlines([keepends=True])

都是用来分割字符串,并生成一个列表。

split() 根据sep对S进行分割,maxsplit用于指定分割次数,如果不指定maxsplit或者给定值为"-1",则会从做向右搜索并且每遇到sep一次就分割直到搜索完字符串。如果不指定sep或者指定为None,则改变分割算法:以空格为分隔符,且将连续的空白压缩为一个空格。

rsplit() 和 split() 是一样的,只不过是从右边向左边搜索。

splitlines()用来专门用来分割换行符。虽然它有点像 split('\n') 或 split('\r\n') ,但它们有些区别,见下文解释。

首先是split()的示例分析( rsplit() 示例略)。

# sep为单个字符时
>>> '1,2,3'.split(',')
['1', '2', '3']>>> '1,2,3'.split(',',1)
['1', '2,3']    # 只分割了一次>>> '1,2,,3'.split(',')
['1', '2', '', '3']  # 不会压缩连续的分隔符>>> '<hello><><world>'.split('<')
['', 'hello>', '>', 'world>']# sep为多个字符时
>>> '<hello><><world>'.split('<>')
['<hello>', '<world>']# 不指定sep时
>>> '1 2 3'.split()
['1', '2', '3']>>> '1 2 3'.split(maxsplit=1)
['1', '2 3']>>> '   1    2   3   '.split()
['1', '2', '3']>>> '   1    2   3  \n'.split()
['1', '2', '3']# 显式指定sep为空格、制表符、换行符时
>>> ' 1  2  3  \n'.split(' ')
['', '1', '', '2', '', '3', '', '\n']>>> ' 1  2  3  \n'.split('\t')
[' 1  2  3  \n']>>> ' 1 2\n3 \n'.split('\n')
[' 1 2', '3 ', '']  # 注意列表的最后一项''>>> ''.split('\n')
['']

再是splitlines()的示例分析。

splitlines() 中可以指定各种换行符,常见的是 \n 、 \r 、 \r\n 。如果指定keepends为True,则保留所有的换行符。

>>> 'ab c\n\nde fg\rkl\r\n'.splitlines()
['ab c', '', 'de fg', 'kl']>>> 'ab c\n\nde fg\rkl\r\n'.splitlines(keepends=True)
['ab c\n', '\n', 'de fg\r', 'kl\r\n']

将split()和splitlines()相比较一下:

#### split()
>>> ''.split('\n')
['']            # 因为没换行符可分割>>> 'One line\n'.split('\n')
['One line', '']#### splitlines()
>>> "".splitlines()
[]              # 因为没有换行符可分割>>> 'Two lines\n'.splitlines()
['Two lines']

7.join

S.join(iterable)

将可迭代对象(iterable)中的字符串使用S连接起来。注意,iterable中必须全部是字符串类型,否则报错。

如果你还是python的初学者,还不知道iterable是什么,却想来看看join的具体语法,那么你可以暂时将它理解为:字符串string、列表list、元组tuple、字典dict、集合set。

例如:

1.字符串

>>> L='python'
>>> '_'.join(L)
'p_y_t_h_o_n'

2.元组

>>> L1=('1','2','3')
>>> '_'.join(L1)
'1_2_3'

3.集合。注意,集合无序。

>>> L2={'p','y','t','h','o','n'}
>>> '_'.join(L2)
'n_o_p_h_y_t'

4.列表

>>> L2=['py','th','o','n']
>>> '_'.join(L2)
'py_th_o_n'

5.字典

>>> L3={'name':"malongshuai",'gender':'male','from':'China','age':18}
>>> '_'.join(L3)
'name_gender_from_age'

6.iterable参与迭代的部分必须是字符串类型,不能包含数字或其他类型。

>>> L1=(1,2,3)
>>> '_'.join(L1)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected str instance, int found
以下两种也不能join。
>>> L1=('ab',2)
>>> L2=('AB',{'a','cd'})

8.修剪:strip、lstrip和rstrip

S.strip([chars])
S.lstrip([chars])
S.rstrip([chars])

分别是移除左右两边、左边、右边的字符char。如果不指定chars或者指定为 None ,则默认移除空白(空格、制表符、换行符)。

唯一需要注意的是,chars可以是多个字符序列。在移除时,只要是这个序列中的字符,都会被移除。

例如:

1.移除单个字符或空白。

>>> '   spacious   '.lstrip()
'spacious   '>>> '   spacious   '.rstrip()
'   spacious'>>> 'spacious   '.lstrip('s')
'pacious   '>>> 'spacious'.rstrip('s')
'spaciou'

2.移除字符中的字符。

>>> print('www.example.com'.lstrip('cmowz.'))
example.com
>>> print('wwwz.example.com'.lstrip('cmowz.'))
example.com
>>> print('wwaw.example.com'.lstrip('cmowz.'))
aw.example.com
>>> print('www.example.com'.strip('cmowz.'))
'example'

由于 www.example.com 的前4个字符都是字符序列 cmowz. 中的字符,所以都被移除,而第五个字符e不在字符序列中,所以修剪到此结束。同理 wwwz.example.com 。

wwaw.example.com 中第3个字符a不是字符序列中的字符,所以修剪到此结束。

python字符串方法大全相关推荐

  1. [转载] python 字符串方法大全

    参考链接: Python字符串| rpartition 4.7.1.字符串方法 字符串实现所有常见的序列操作,以及下面描述的其他方法. 字符串还支持两种类型的字符串格式化的,一个提供了很大程度的灵活性 ...

  2. python 字符串方法大全

    4.7.1.字符串方法 字符串实现所有常见的序列操作,以及下面描述的其他方法. 字符串还支持两种类型的字符串格式化的,一个提供了很大程度的灵活性和定制(见str.format(), 格式化字符串的语法 ...

  3. [转载] python字符串方法有哪些_27种Python字符串操作方法大全

    参考链接: Python字符串方法3| strip,lstrip,rstrip,min,max,maketrans,translate,replace和expandtabs 1.去空格及特殊符号 代码 ...

  4. Python 字符串方法详解

    Python 字符串方法详解 本文最初发表于赖勇浩(恋花蝶)的博客(http://blog.csdn.net/lanphaday),如蒙转载,敬请保留全文完整,切勿去除本声明和作者信息. 在编程中,几 ...

  5. js检测字符串方法大全

    js检测字符串方法大全 <script> /* function obj$(id)                      根据id得到对象 function val$(id)      ...

  6. 常见的几种python字符串方法总结

    常见的几种python字符串方法总结 python的字符串模块很强大,有很多内置的方法,我们介绍下常用的字符串方法: 一. find和rfind方法查找字串所在位置 s = 'abcdef' prin ...

  7. 仅需10道题轻松掌握Python字符串方法 | Python技能树征题

    仅需10道题轻松掌握Python字符串方法 | Python技能树征题 0. 前言 1. 第 1 题:字符串检查 2. 第 2 题:字符串大小写转换 3. 第 3 题:字符串开头或结尾匹配 4. 第 ...

  8. python字符串方法的简单使用

    学习python字符串方法的使用,对书中列举的每种方法都做一个试用,将结果记录,方便以后查询. (1) s.capitalize() ;功能:返回字符串的的副本,并将首字母大写.使用如下: 1 > ...

  9. 31个好用的 Python 字符串方法,建议收藏!

    作者 | 小F 来源 | 法纳斯特 字符串是Python中基本的数据类型,几乎在每个Python程序中都会使用到它. 今天,就带大家学习一下31个最重要的内置字符串方法. 希望大家能从中找到对自己有帮 ...

最新文章

  1. 多激光雷达与相机的外参快速精准标定(arxiv 2021)
  2. Linux服务器网络故障诊断
  3. (DML触发器)如何正确理解触发器的deleted表和inserted表(转)
  4. Matlab中解决出现的错误使用 svmtrain (line 234) Y must be a vector or a character array.问题
  5. 享学金三银四一线大厂面试专题学习笔记
  6. Java代码简化之lombok
  7. JVM实用参数(七)CMS收集器
  8. Hadoop分布式文件系统:架构和设计要点
  9. 你担心大家会滥用的全局变量,大家(包括你自己)一定会滥用
  10. java地图图表动态亮点,可视化图表行动指南:地表最强解读来了
  11. -bash: composer: command not found解决办法
  12. java 打印_剑指Offer面试题20(Java版):顺时针打印矩阵
  13. git mysql差异备份_结合Git实现Mysql差异备份,可用于生产环境
  14. 转载:(C++)浅谈多态基类析构函数声明为虚函数
  15. 动画效果之时间轴对象构造器(即逐个执行动画)
  16. 七周成为数据分析师 第五周:Mysql
  17. 根据四个特征点求解相机位姿
  18. python opencv 边缘检测 抠图,python和opencv实现抠图
  19. 软件测试必备技能有哪些?
  20. 如何改变图片尺寸?怎么调整图片大小?

热门文章

  1. java automapper 使用_AutoMapper实际项目运用
  2. 【Tomcat】Tomcat安装及环境配置
  3. 今日头条移动APP 广告激活数据API对接实践
  4. R语言如何自定义调整所绘图形的大小?
  5. Linux数据库1——基本介绍
  6. 深扒互联网大厂招聘中的学历鄙视链
  7. C# 使用VS 性能探查器(快捷键:Alt+F2)
  8. SpringBoot 日志脱敏,开源组件太强了!
  9. Git使用总结(包含Git Bash和Git GUI的使用)
  10. 全群禁言群检测删除投票广告的方法