首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

第3.7节 再说字符串

  • 23-09-22 18:41
  • 3546
  • 9894
blog.csdn.net

一、    字符串补充知识
1.    上节介绍的三引号是三个单引号,经查有关资料及验证,确认三个双引号也可以。非常抱歉误导大家了;
2.    原始字符串:原始字符串就表示字符串中的信息如果存在反斜杠不会进行转义,直接将反斜杠()作为一个字符串中的字符。但原始字符串不能以单个反斜杠结尾,如果要指定以反斜杠结尾的原始字符串(如以反斜杠结尾的DOS路径),是将反斜杠单独作为一个字符串。原始字符串在普通字符串前加前缀r表示。示例:


 

  1. rs = r'C:Program Filesfooar '+'\'
  2. print(rs)  #输出C:Program Filesfooar
  3. rs  #输出'C:\Program Files\foo\bar\n\'


 
3.    多个字符串连着写等同于字符串拼接,如:
s='This ''is '+'a test'  #结果s='This is a test'

二、    字符串更多的操作方法
1.    find (substr[, start[, end]])在字符串中查找子串,还可指定搜索的起点和终点(它们都是可选的)。如果找到,就返回子串的第一个字符的索引,否则返回-1。类似方法还有:
1)    rfind:调用格式与find相同,其返回值是在查找字符串中找到的最后一个子串的索引值,找不到返回-1;
2)    index、rindex:与find与rfind类似,只是找不到的时候返回的异常ValueError;
3)    count(sub[, start[, end]]):返回找到子字符串的个数;
4)    startswith (prefix[, start[, end]]):判断字符串指定位置是否开始于参数对应的前缀字符串;
5)    endswith (suffix [, start[, end]]):判断字符串指定位置是否结束于参数对应的后缀字符串;
2.    方法replace (old, new, count=-1, /),将指定子串old都替换为另一个字符串new,并返回替换后的结果,而原字符串保持不变,count表示最多替换多少次,-1替换所有。如:
s="This is a dog!It's name is Coffee!"
 s.replace('is','iis',2)  #执行后返回"Thiis iis a dog!It's name is Coffee!"
此时s="This is a dog!It's name is Coffee!" 保持不变
3.    方法translate(table):方法translate与replace一样替换字符串的特定部分,但不同的是它只能进行单字符替换。这个方法的优势在于能够同时替换多个字符,因此效率比replace高。使用translate前必须创建一个转换表table。这个转换表指出了不同字符之间的转换关系。要创建转换表,可对字符串类型str调用静态方法maketrans返回一个可供 str.translate() 使用的转换对照表。
maketrans如果只有一个参数,则它必须是一个将 Unicode 码位序号(整数)或字符(长度为 1 的字符串)映射到 Unicode 码位序号、(任意长度的)字符串或 None 的字典。相当于字典中记录了新旧字符的映射关系。字符键将会被转换为码位序号。
如果有两个参数,则它们必须是两个长度相等的字符串,并且在结果字典中,x 中每个字符将被映射到 y 中相同位置的字符。 如果有第三个参数,它必须是一个字符串,其中的字符将在结果中被映射到 None。就是第三个参数字符串中的字符被返回字符串中删除。
table = str.maketrans('IS', 'is')
如果愿意,可查看转换表的内容,但你看到的只是Unicode码之间的映射。
table={73: 105, 83: 115}
创建转换表后,就可将其用作方法translate的参数。调用方法maketrans时,还可提供可选的第三个参数,指定要将哪些字母删除。
 
 

  1. s='This*$IS$*A&*TEST****???///$$$###'
  2. t=s.maketrans('AISTE*?','aiste !','$#/&') #创建转换表,同时指定删除‘$#/&’
  3. news=s.translate(t) #返回后news='this is a test !!!'
  4. d={'*':' ','$':'','$':'','#':'','?':'!'} #通过键对应值为空将键对应字符删除
  5. t=s.maketrans(d)
  6. news=s.translate(t) #返回后news='This IS A& TEST !!!///'


4.    split(sep=None, maxsplit=-1)方法:返回一个由字符串内单词组成的列表,使用 sep 作为分隔字符串。 如果给出了 maxsplit,则最多进行 maxsplit 次拆分(因此,列表最多会有 maxsplit+1 个元素)。 如果 maxsplit 未指定或为 -1,则不限制拆分次数(进行所有可能的拆分)。如果给出了 sep,则连续的分隔符不会被组合在一起而是被视为分隔空字符串 (例如 '1,,2'.split(',') 将返回 ['1', '', '2'])。 sep 参数可能由多个字符组成 (例如 '1<>2<>3'.split('<>') 将返回 ['1', '2', '3'])。 使用指定的分隔符拆分空字符串将返回 ['']。。
5.    rsplit(sep=None, maxsplit=-1)方法:返回一个由字符串内单词组成的列表,使用 sep 作为分隔字符串。 如果给出了 maxsplit,则最多进行 maxsplit 次拆分,从 最右边 开始。 如果 sep 未指定或为 None,任何空白字符串都会被作为分隔符。除了从右边开始拆分,rsplit() 的其他行为都类似于split();
6.    splitlines([keepends])方法:返回由原字符串中各行组成的列表,在行边界的位置拆分。 结果列表中不包含行边界,除非给出了 keepends=True。对于空字符串此方法将返回一个空列表,而末尾的换行不会令结果中增加额外的行。
此方法会以下列行边界进行拆分。行边界是 universal newlines 的一个超集,包括如下:
表示符                          描述
1)                                   换行
2)                                   回车
3)                                 回车 + 换行
4)    v 或 x0b                       行制表符
5)    f 或 x0c                       换表单
6)    x1c                             文件分隔符
7)    x1d                             组分隔符
8)    x1e                             记录分隔符
9)    x85                             下一行 (C1 控制码)
10)    u2028                           行分隔符
11)    u2029                           段分隔符
7.    rpartition(sep)方法:在 sep 最后一次出现的位置拆分字符串,返回一个 3 元组,其中包含分隔符之前的部分、分隔符本身,以及分隔符之后的部分。 如果分隔符未找到,则返回的 3 元组中包含两个空字符串以及字符本身;
8.    join方法:作用与split相反,用于合并序列的元素,所合并序列的元素必须都是字符串,要将字符列表转换为字符串,可使用''.join(somelist)
 
9.    ljust(width[, fillchar])方法:返回长度为 width 的字符串,原字符串在其中靠左对齐。 使用指定的 fillchar 填充空位 (默认使用 ASCII 空格符)。 如果 width 小于等于 len(s) 则返回原字符串的副本。
10.    rjust(width[, fillchar])方法:返回长度为 width 的字符串,原字符串在其中靠右对齐。 使用指定的 fillchar 填充空位 (默认使用 ASCII 空格符)。 如果 width 小于等于 len(s) 则返回原字符串的副本;
11.    center方法:通过在两边添加填充字符(默认为空格)让字符串居中;
12.    zfill(width)方法:返回原字符串的副本,在左边填充 ASCII '0' 数码使其长度变为 width。 正负值前缀 ('+'/'-') 的处理方式是在正负符号 之后 填充而非在之前。 如果 width 小于等于 len(s) 则返回原字符串的副本。
13.    方法strip:上一节简单介绍了,将字符串开头和末尾的空白(但不包括中间的空白)删除,并返回删除后的结果,除此之外还可在一个字符串参数中指定在前后要删除哪些字符

  1. '*** SPAM * for * everyone!!! ***'.strip(' *!')
  2. 'SPAM * for * everyone'


14.    casefold()方法:返回原字符串转换为小写的副本。 与low相比它会移除字符串中的所有大小写变化形式。 例如,德语小写字母 ' ?' 相当于 "ss"。 由于它已经是小写了,lower() 不会对 ' ?' 做任何改变;而 casefold() 则会将其转换为 "ss";
15.    swapcase()方法:返回原字符串的副本,其中大写字符转换为小写,反之亦然。
16.    expandtabs(tabsize=8):返回字符串的副本,其中所有的制表符会由一个或多个空格替换,具体取决于当前列宽度和给定的制表符宽度。 每 tabsize 个字符设为一个制表位(默认值 8 时设定的制表位在列 0, 8, 16 依次类推)。 要展开字符串,当前列将被设为零并逐一检查字符串中的每个字符。 如果字符为制表符 ( ),则会在结果中插入一个或多个空格符,直到当前列等于下一个制表位。 (制表符本身不会被复制。) 如果字符为换行符 ( ) 或回车符 ( ),它会被复制并将当前列重设为零。 任何其他字符会被不加修改地复制并将当前列加一,不论该字符在被打印时会如何显示。。
17.    判断字符串是否满足特定的条件,上一节介绍了istitle、isupper、islower,很多字符串方法都以is打头,如isspace、isdigit和isupper,它们判断字符串是否具有特定的性质(如包含的字符全为空白、数字或大写)。如果字符串具备特定的性质,这些方法就返回True,否则返回False。如:isalnum(是否为字母或数字)、isalpha(是否为字母)、isdecimal、isdigit、isidentifier(是否标识符)、isnumeric、isprintable、isspace。其中isdecimal 、isdigit、isnumeric的区别如下:
Isdecimal:是否为十进制数字符,包括Unicode数字、双字节全角数字,不包括罗马数字、汉字数字、小数;
Isdigit:是否为数字字符,包括Unicode数字,单字节数字,双字节全角数字,不包括汉字数字,罗马数字、小数
Isnumeric:是否所有字符均为数值字符,包括Unicode数字、双字节全角数字、罗马数字、汉字数字,不包括小数
举例:
 

  1. def isnumber(s):
  2.      print(s+':',s.isdigit())
  3.      print(s+':',s.isdecimal())
  4.      print(s+':',s.isnumeric())


执行函数isnumber('123'),三个都是True,执行函数isnumber('123.0'),三个都是False,执行函数isnumber('壹贰叁'),打印分别是False、False、True,罗马数字也是一样的结果。

18.    ord(c)函数:返回字母c的unicode码,ASCII字符返回的就是ASCII码;
19.    chr(i)函数:返回一个unicode码对应的字符,0 <= i <= 0x10ffff。

本节继续补充介绍了字符串的一些概念和更多的操作方法,内容好理解,稍微复杂点的举例进行了说明,大家可以自行练习。后续章节将介绍字符串的高级功能。

    老猿Python(http://iyenn.com/index/link?url=https://blog.csdn.net/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。 

    欢迎大家批评指正,谢谢大家关注!

文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树基础语法数据类型333596 人正在系统学习中
老猿Python
微信公众号
专注Python相关语言、图像音视频处理、AI
注:本文转载自blog.csdn.net的LaoYuanPython的文章"https://blog.csdn.net/LaoYuanPython/article/details/89409876"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top