zoukankan      html  css  js  c++  java
  • 第3.7节 再说字符串

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


     

    rs = r'C:Program Filesfooar
    '+'\'
    print(rs)  #输出C:Program Filesfooar
    
    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时,还可提供可选的第三个参数,指定要将哪些字母删除。
     
     

    s='This*$IS$*A&*TEST****???///$$$###' 
    t=s.maketrans('AISTE*?','aiste !','$#/&') #创建转换表,同时指定删除‘$#/&’
    news=s.translate(t)  #返回后news='this is a test    !!!'
    d={'*':' ','$':'','$':'','#':'','?':'!'} #通过键对应值为空将键对应字符删除
    t=s.maketrans(d)
    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:上一节简单介绍了,将字符串开头和末尾的空白(但不包括中间的空白)删除,并返回删除后的结果,除此之外还可在一个字符串参数中指定在前后要删除哪些字符

    '*** SPAM * for * everyone!!! ***'.strip(' *!')
    '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数字、双字节全角数字、罗马数字、汉字数字,不包括小数
    举例:
     

    def isnumber(s):
         print(s+':',s.isdigit())
         print(s+':',s.isdecimal())
         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(https://blog.csdn.net/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。 

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

  • 相关阅读:
    java积累的细节问题
    如何用IDEA创建springboot(maven)并且整合mybatis连接mysql数据库和遇到的问题
    CentOS 7最小化安装图解
    不用插件!教你一键显示浏览器自动保存的密码
    pycharm 配置autopep8(亲测可行)
    钉钉机器人自动推送股票信息
    金蝶云星空通过数据库删除指定销售合同
    金蝶云星空复选框审批设置
    datetime小练习
    time and datetime
  • 原文地址:https://www.cnblogs.com/LaoYuanPython/p/11087736.html
Copyright © 2011-2022 走看看