字符串的编码与构造、字符串格式化、字符串的截取、字符串常用函数、正则表达式

了解ASCII码

  • ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。
  • ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的最高位为二进制0)来表示所有的大写和小写字母、数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符。128 到255为扩展ASCII码。

UTF-8编码

  • UTF-8编码是“可变长编码”,它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。UTF-8编码以一个字节表示英语字符(兼容ASCII),以3个字节表示中文,还有一些语言使用2个字节或4个字节。
  • Python3.x完全支持中文字符,解析器默认采用 UTF-8解析源程序,无论是数字字符、英文字母、汉字都按一个字符来对待和处理。

字符串构造

  • 在Python中字符串的构造,主要通过两种方法来实现,一是使用str函数,二是用单引号、双引号或三引号。在Python中,使用引号是一种非常便捷的构造字符串方式。

单引号或双引号构造字符串

  • 在用单引号或双引号构造字符串时,要求引号成对出现。
  • 如:‘Python World!’、‘ABC’、“what is your name?”,都是构造字符串的方法。
  • 'string"在Python中不是一个合法的字符串。

单双引号构造字符串的特殊用法

  • 如果代码中的字符串包含了单引号,且不用转义字符,那么整个字符串就要用双引号来构造,否则就会出错。

    在这里插入图片描述

  • 如果代码中的字符串包含了双引号,且不用转义字符,那么整个字符串要用单引号来构造。
    在这里插入图片描述

字符串中引号的转义

在这里插入图片描述

  • 上面代码中的反斜线“\”对字符串中的引号进行了转义,表示反斜线后的单引号是字符串中的一个普通字符,而不是字符串构造的边界字符

转义字符

  • 转义字符以“\”开头,后接某些特定的字符或数字。
  • Python中常用的转义字符:
    在这里插入图片描述

原始字符串

  • 假设在C:\test文件夹中有一个文件夹net,如何输出完整路径呢?可能你想到的是:
    在这里插入图片描述
  • 怎么会是这样的输出呢?原来字符串中“\t”和“\n”都表示转义字符。
  • 正确的路径如何表示呢?
  • 在这里插入图片描述

三重引号字符

  • 三重引号字符串是一种特殊的用法。三重引号将保留所有字符串的格式信息。如字符串跨越多行,行与行之间的回车符、引号、制表符或者其他任何信息,都将保存下来。在三重引号中可以自由的使用单引号和双引号。
    在这里插入图片描述

字符串格式化

%符号格式化字符串

  • 字符串格式化涉及到两个概念:
    • 格式以%开头,
    • 格式化运算符%表示用对象代替格式串中的格式
  • 最终得到一个字符串。

字符串格式化的一般形式

在这里插入图片描述

  • [ ]中的内容可以省略;
  • 简单的格式是%加格式字符,如%f、%d、%c等;
  • 当最小宽度及精度都出现时,它们之间不能有空格,格式字符和其他选项之间也不能有空格,如%8.2f

常用字符串的含义

在这里插入图片描述

最小宽度和精度

  • 最小宽度是转换后的值所保留的最小字符个数。
  • 精度(对于数字来说)则是结果中应该包含的小数位数。
    在这里插入图片描述
  • 一次转换多个对象,这些对象表示成一个元组形式,位置与格式化字符一一对应,%.2f表示3.456727的格式形式,%4d表示89的格式形式,%s表示’Lily’的格式形式,逗号“,”原封不动输出。
    在这里插入图片描述

进位制和科学计数法

  • 把一个数转换成不同的进位制,也可按科学计数法进行转换。
    在这里插入图片描述
  • 以上代码表示将十进制数a分别转换为八进制串、十六进制串和科学计数法串。
  • 案例(输出九九乘法表):
    在这里插入图片描述
    在这里插入图片描述

format()方法格式化字符串

  • format()方法是通过{}和:来代替传统%方式。
    在这里插入图片描述
  • format方法格式化时,
  • 可以使用位置参数,根据位置来传递参数;
  • 可以通过索引值来引用位置参数,只要format方法相应位置上有参数值即可,参数索引从0开始;
  • 可以使用序列,通过format方法中序列参数的位置索引和序列中元素索引来引用相应值;
  • 可以用“*序列名称”的形式作为format方法的参数,通过位置依次将序列中的元素传递到目标字符串中。
  • 可以使用关键参数的形式,也可用“**字典名”的形式将字典中的元素作为参数。
    在这里插入图片描述
  • 上面大括号最前面的0不写也可以。
  • 带’f’前缀,类似于format()方法格式化字符串
    在这里插入图片描述

字符串截取(类比列表)

  • 字符串的截取就是取出字符串中的子串。截取有两种方法:一种是索引str[index]取出单个字符;另一种是切片str[[start]:[end]:[step]]取出一片字符。切片方式与列表部分介绍的一样。
  • 字符串中字符的索引跟列表一样,可以双向索引。
    在这里插入图片描述

字符串常用内置函数

1. len()

2. ord()

  • 获取字符的Unicode码

3. chr()

  • 把编码转换为对应的字符

4. max()

5. min()

  • 代码案例(编写程序,输入一个字符串,分别统计大写字母、小写字母、数字以及其他字符的个数,并分别以前面介绍的3种字符串格式化方式分别显示各种字符个数。数字仅包括阿拉伯数字。):
s=input('请输入一个字符串:')
c1,c2,c3,c4=0,0,0,0

for i in s:
    if "A"<=i<="z":
        c1+=1

    elif "a"<=i<="z":
        c2+=1

    elif"0"<=i<="9":
        c3+=1

    else:
        c4+=1
# 三种打印方式
print("大写字母%d个;小写字母%d个;数字%d个;其他字符%d个。"%(c1,c2,c3,c4))

print("大写字母{0}个;小写字母{1}个;数字{2}个;其他字符{3}个。".format(c1,c2,c3,c4))

print(f"大写字母{c1}个;小写字母{c2}个;数字{c3}个;其他字符{c4}个。")

6. center()、ljust()、rjust()

  • 格式:

    • center(self, width, fillchar=’ ', /)
    • ljust(self, width, fillchar=’ ', /)
    • rjust(self, width, fillchar=’ ', /)
  • 说明:

    • width:指定宽度;
    • fillchar:填充的字符,默认为空格。
  • 功能:

    • 返回一个宽度为width的新字符串,原字符串居中(左对齐或右对齐)出现在新字符串中,如果width大于字符串长度,则使用fillchar进行填充。
      在这里插入图片描述
  • 使用format()方法和ljust()方法打印出九九乘法表:

for i in range(1,10):
    for j in range(1,i+1):
        print("{0}*{1}={2}".format(i,j,i*j).ljust(8),end="")
    print()

7. lower()、upper()

  • lower()方法将大写字母转换为小写字母,其他字符不变,并返回新字符串。
  • upper()方法将小写字母转换为大写字母,其他字符不变,并返回新字符串。
  • 代码案例(有一批淘宝用户名"风云Th"、“Brown”、“飘然12345”、“云S”、“thomas”、“青山依旧QSYJ”,编写程序,将这些用户名存储在一个列表中,查找用户名"thomas"是否存在。要求输入的thomas大小写无关,即输入Thomas、THOmas、thoMAs等均能找到):
names=["风云Th","Brown","飘然12345","云S","thomas","青山依旧QSYJ"]

name=input("请输入用户名:")

for i in names:

    if name.lower() ==i.lower():

        print("找到")

        break

else:

    print("未找到")

8. capitalize()、title()、swapcase()

  • capitalize()方法将字符串首字母转换为大写形式,其他字母转换为小写形式。
  • title()方法将每个单词的首字母转换为大写形式,其他部分的字母转换为小写形式。
  • swapcase()字符将大小写互换。均返回新字符串,原字符串对象不做任何修改。

9. islower()、isupper()、isdigit()

  • 功能:测试字符串是否为小写、大写、数字。如果是,则返回True;否则返回False。
  • 小小案例(利用isupper()、islower()、isdigit()分别判断是否为大写字母、小写字母、数字字符,并分别统计三种字符的个数。用字符串格式化方式分别显示三种字符的个数):
s=input('请输入一个字符串:')
c1,c2,c3,c4=0,0,0,0    
for i in s:
    if i.isupper():
        c1+=1        
    elif i.islower():
        c2+=1        
    elif i.isdigit():
        c3+=1       
    else:
        c4+=1
print(f"大写字母{c1}个;小写字母{c2}个;数字{c3}个;其他字符{c4}个。")

10. find()、rfind()

  • 格式:

    • S.find(sub[, start[, end]])
    • S.rfind(sub[, start[, end]])
  • 说明:

    • sub:字符串(子串);
    • start:开始位置;
    • end:结束位置。查找范围start开始,end结束,不包括end。
  • 功能:

    • 在一个较长的字符串S中,在[start,end)范围内查找并返回子串sub首次出现的位置索引,如果没有找到则返回-1。默认范围是整个字符串。其中find()方法从左往右查找,rfind()方法从右往左查找。
      在这里插入图片描述

11. index()、rindex()

  • 格式:
    • S.index(sub[, start[, end]])
    • S.rindex(sub[, start[, end]])
  • 功能:
    • 在一个较长的字符串S中,查找并返回在[start,end)范围内子串sub首次出现的位置索引,如果不存在则抛出异常。默认范围是整个字符串。其中index()方法从左往右查找,rindex()方法从右往左查找。

12. count()

  • 格式:S.count(sub[, start[, end]])
  • 功能:在一个较长的字符串S中,查找并返回[start,end)范围内子串sub出现的次数,如果不存在则返回0。默认范围是整个字符串。

13. split()

  • split(self, /, sep=None, maxsplit=-1)
  • 功能:以指定字符为分隔符,从左往右将字符串分割开来,并将分割后的结果组成列表返回。
  • sep表示分割符;maxsplit表示最大分割次数,-1表示不限次数
  • 如果字符串中的某种字符出现0次或多次,可以利用split()方法,根据该字符把字符串分离成多个子串组成的列表。

在这里插入图片描述

  • 对于split(),如果不指定分隔符,实际上表示以任何空白字符(包括连续出现的)作为分隔符。空白字符包括空格、换行符、制表符等。
  • 除了split(),还有rsplit(),表示从右往左将字符串分割开来,这两种方法还能指定最大分隔次数。

14. join()

  • join()方法可用来连接序列中的元素,并在两个元素之间插入指定字符,返回一个字符串。
    在这里插入图片描述
  • join()方法是split()方法的逆方法。
    在这里插入图片描述

15. replace()

  • replace(old,new,count=-1)方法查找字符串中old子串并用new子串来替换。参数count默认值为-1,表示替换所有匹配项,否则最多替换count次。返回替换后的新字符串
    在这里插入图片描述

16. maketrans()、translate()

  • maketrans()方法生成字符映射表,translate()方法是根据字符映射表替换字符。这两种方法联合起来使用可以一次替换多个字符。
    在这里插入图片描述

17. strip(self, chars=None, /)

  • strip()方法去除字符串两侧的空白字符或指定字符,并返回新字符串。
    在这里插入图片描述
  • 思考:如何去除字符串中间的空格?
    在这里插入图片描述

正则表达式

  • 正则表达式是一个特殊的字符序列,利用事先定义好的一些特定字符以及它们的组合,组成一个“规则”,检查一个字符串是否与这种规则匹配来实现对字符的过滤或匹配。正则表达式是字符串处理的有力工具,但是并不是Python独有的,其他语言也有。
  • Python中,re模块提供了正则表达式操作所需要的功能。
  • 大多数字母和字符一般都会和自身匹配。如果在字符串前面加了r,表示对字符串不进行转义。有些字符比较特殊,它们和自身并不匹配,而是表明应和一些特殊的东西匹配,或者会影响重复次数。这些特殊的字符我们称之为元字符
  • re模块中findall()方法以列表的形式返回所有能匹配的子串,如果没有找到匹配的,则返回空列表。
    在这里插入图片描述

一些常用的正则表达式元字符

1. “.”:表示除换行符以外的任意字符

  • 与“.”类似(但不相同)的一个符号是“\S”,表示不是空白符的任意字符。注意是大写字符S。
    在这里插入图片描述

2. “[]”:指定字符集

  • 常用来指定一个字符集,例如:[abc]、[a-z]、[0-9];
  • 元字符在方括号中不起作用,例如:[akm$]和[m.]中元字符都不起作用;
  • 方括号内的“ ^ ”表示补集,匹配不在区间范围内的字符,例如:[^3]表示除3以外的字符。
    在这里插入图片描述

3.“ ^ ”:匹配行首,匹配以^后面的字符开头的字符串

在这里插入图片描述

4.“ $ ”:匹配行尾,匹配以$之前的字符结束的字符串

在这里插入图片描述

5.“\”:反斜杠后面可以加不同的字符以表示不同的特殊意义

  • \b匹配单词头或单词尾;
  • \B与\b相反,匹配非单词头或单词尾;
  • \d匹配任何十进制数;相当于[0-9]
  • \D与\d相反,匹配任何非数字字符,相当于[^0-9]
  • \s匹配任何空白字符,相当于[\t\n\r\f\v]
  • \S与\s相反,匹配任何非空白字符,相当于[^\t\n\r\f\v]
  • \w匹配任何字母、数字或下画线字符,相当于[a-zA-Z0-9_]
  • \W与\w相反,匹配任何非字母、数字和下画线字符,相当于[^a-zA-Z0-9_]
  • 也可以用于取消所有的元字符:\\\[
  • 这些特殊字符都可以包含在[]中。如:[\s,.]将匹配任何空白字符、“,“或”.”。
    在这里插入图片描述
  • 正则表达式除了能够匹配不定长的字符集,还能指定正则表达式的一部分的重复次数,所涉及的元字符有“*”、“+”、“?”、“{}”。

6.“ * ”:匹配位于*之前的字符或子模式的0次或多次出现

在这里插入图片描述

7.“+”:匹配位于+之前的字符或子模式的1次或多次出现

在这里插入图片描述

8.“?”:匹配位于?之前的0个或1个字符

  • 当“?”紧随其他限定符(*、+、{n}、{n,}、{n,m})之后时,匹配模式是“非贪心的”。“非贪心的”模式匹配搜索到尽可能短的字符串,而默认的“贪心的”模式匹配搜索到的、尽可能长的字符串。
    在这里插入图片描述

9.“{m,n}”:表示至少有m个重复,至多有n个重复。m,n均为十进制数

  • 忽略m表示0个重复,忽略n表示无穷多个重复。
  • {0,}等同于*;{1,}等同于+;{0,1}与?相同。但是如果可以的话,最好使用*、+、或?。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宇宙超级无敌霸王龙捏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值