版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
模块7字符串与正则表达式17.1字符串概述7.1.1字符串编码1.ASCII码因为计算机只能处理数字,如果要处理字符串,就必须先把字符串转换为数字才能处理。最早的字符串编码是美国标准信息交换码ASCII码,仅对10个数字、26个英文字母的大小写及一些常用符号进行了编码。ASCII码采用1个字节来对字符进行编码,所以最多只能表示256个符号。2.GB2312编码要处理中文显然一个字节是不够的,至少需要两个字节。所以,中国制定了GB2312编码,用来把中文编进去。GB2312编码使用1个字节表示英文,2个字节表示中文。27.1字符串概述3.Unicode编码Unicode编码把所有语言都统一到一套编码里,这样就不会再有乱码问题了。Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符。4.UTF-8编码如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。所以,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间。37.1字符串概述7.1.2转义字符4转义字符描述\a蜂鸣器响铃。现在的计算机很多都不带蜂鸣器了,所以响铃不一定有效。\b退格(Backspace键),将光标位置移到前一列。\f换页符,将光标位置移到下一页开头\n换行符,将光标位置移到下一行开头。\r回车符(Enter键)。\t水平制表符(Tab键),一般相当于四个空格。\v垂直制表符。\\一个反斜线字符“\”。\'一个单引号字符。\"一个双引号字符。\oyy八进制数表示的字符,yy代表八进制数字,例如:\o12代表换行。\xyy十六进制数表示的字符,yy代表十六进制数,例如:\x0a代表换行。\other其他的字符以普通格式输出。\在字符串行尾的续行符,即一行未完,转到下一行继续写。7.1字符串概述示例:>>>print("I\'mastudent.")I'mastudent.>>>print("C:\\Program\\Python")C:\Program\Python>>>print('Hello\nWorld')HelloWorld>>>print('\101')A>>>print('姓名\t性别\t年龄\n\张三\t男\t22')姓名
性别
年龄张三
男 2257.1字符串概述为了避免对字符串中的转义字符进行转义,可以使用原始字符串,在字符串前面加上字母r或R表示原始字符串,其中的所有字符都表示原始的含义而不会进行任何转义。>>>print('d:\tools\note')#\t被转义为制表符,\n被转义为换行符d: oolsote>>>print(r'd:\tools\note')#原始字符串,任何字符都不转义d:\tools\note67.2字符串操作7.2.1字符串格式化1.format函数Python2.6开始,新增了一种字符串格式化的函数format,它增强了字符串格式化的功能。format函数基本使用格式是:<模板字符串>.format(<逗号分隔的参数>)format函数使用方式非常灵活:(1)按照默认顺序使用>>>a=35>>>b=67>>>print("a和b的值分别是{}和{}".format(a,b))a和b的值分别是35和6777.2字符串操作(2)设置指定位置,可以多次使用>>>a=35>>>b=67>>>print("a和b的值分别是{0}和{1},较小的数是{0}".format(a,b))a和b的值分别是35和67,较小的数是35(3)设置format参数的值>>>print("a和b的值分别是{a}和{b}".format(a=35,b=67))a和b的值分别是35和6787.2字符串操作(4)通过字典设置参数>>>site={"name":"百度","url":""}>>>print("网站名:{name},地址:{url}".format(**site))网站名:百度,地址:(5)通过列表索引设置参数>>>site=["百度",""]>>>print("网站名:{0[0]},地址:{0[1]}".format(site))#"0"是必须的网站名:百度,地址:97.2字符串操作2.字面量格式化字符串从Python3.6开始支持一种新的字符串格式化方式,称之为字面量格式化字符串(FormattedStringLiterals)。字面量格式化字符串以“f”开头,后面跟着字符串,字符串中的表达式用大括号“{}”包起来,它会将变量或表达式计算后的值替换进去。>>>name='Moto'>>>print(f"Hello{name}")HelloMoto>>>width=12>>>height=6>>>print(f"宽为{width},高为{height}的矩形的面积是:{width*height}")宽为12,高为6的矩形的面积是:72107.2字符串操作7.2.2字符串运算11运算符描述+字符串连接*重复输出字符串[]通过索引获取字符串中字符[:]截取字符串中的一部分,遵循“左闭右开”原则,例如str[0:2]只包含索引值为0和1的字符in成员运算符,如果字符串中包含给定的字符返回Truenotin成员运算符,如果字符串中不包含给定的字符返回True表7-2常见的字符串运算符7.2字符串操作1.“+”运算符字符串可以使用“+”运算符将多个字符串连接在一起。>>>str1="信息工程系">>>str2="2020级">>>str3="学生">>>print(str1+str2+str3)信息工程系2020级学生127.2字符串操作如果要连接的都是字符串常量,也可以省略“+”运算符。直接将字符串常量紧挨着写在一起。>>>print("字符串""连接""运算符")字符串连接运算符很多时候,我们需要将字符串和数字拼接在一起,而Python不允许直接拼接数字和字符串,所以我们可以借助str()函数先将数字转换成字符串再进行拼接。>>>name="张三">>>age=19>>>print(name+"的年龄是"+str(age)+"岁")张三的年龄是19岁137.2字符串操作2.“*”运算符如果一个字符串需要重复出现多次,可以使用“*”运算符。使用格式如下:字符串*n,(n是重复出现的次数)>>>str1="Hello">>>print(str1*3)HelloHelloHello147.2字符串操作3.“[]”运算符Python中字符串可以被索引,字符串的第一个字符的索引值为0,第二个字符的索引值为1,依次类推。所以可以使用“字符串[索引值]”的形式访问字符串中的单个字符。>>>print("Hello"[0]H>>>str="Student">>>print(str,"第4个字母是:",str[3])Student第4个字母是:d157.2字符串操作Python还支持在索引中使用负数,这将会从右往左进行计数。索引值为-1代表字符串最后一个字符,-2代表字符串从右边数第2个字符,依次类推。>>>str="Student">>>print(str,"最后一个字母是:",str[-1])Student最后一个字母是:t需要注意的是,Python字符串不能被改变,向一个索引位置赋值会导致错误。>>>str="Student">>>str[1]="T"#错误用法Traceback(mostrecentcalllast):File"<pyshell#28>",line1,in<module>str[1]="T"TypeError:'str'objectdoesnotsupportitemassignment167.2字符串操作4.“[:]”运算符“[:]”运算符用于从字符串中截取子串。使用格式如下:字符串[m:n]m代表子串第一个字符的索引值,n-1代表子串最后一个字符的索引值。如果子串第一个字符的索引值为0,可以省略m不写;如果子串最后一个字符是字符串的最后一个字符,可以省略n不写。>>>s="计算机科学与技术">>>print(s[3:5])'科学'>>>print(s[:3])计算机>>>print(s[3:])科学与技术177.2字符串操作5.“in”和“notin”运算符“in”和“notin”是成员运算符,顾名思义,就是用来检测给定的字符或子串是否是一个字符串中的成员。即字符串中是否包含给定的字符或子串。>>>if'He'ins: print('"He"在变量s中')else: print('"He"不在变量s中')"He"在变量s中>>>if'W'notins: print('"W"不在变量s中')else: print('"W"在变量s中')"W"在变量s中187.2字符串操作7.2.3字符串常用方法1.字符串判断方法(1)isalnum方法格式:s.isalnum()作用:如果字符串s中至少有一个字符并且所有字符都是字母或数字则返回True,否则返回False。>>>s1="abc123def">>>s1.isalnum()True>>>s2="a123.4">>>s2.isalnum()False197.2字符串操作(2)isalpha方法格式:s.isalpha()作用:如果字符串s中至少有一个字符并且所有字符都是字母则返回True,否则返回False。>>>s1="Hello">>>s1.isalpha()True>>>s2="HelloWorld">>>s2.isalpha()False207.2字符串操作(3)isdigit方法格式:s.isdigit()作用:如果字符串s中只包含数字则返回True,否则返回False。>>>s1="0123456">>>s1.isdigit()True>>>s2="3.1415926">>>s2.isdigit()False217.2字符串操作(4)isnumeric方法格式:s.isnumeric()作用:如果字符串中只包含各种数字字符,则返回True,否则返回False。>>>s1="一二叁肆千">>>s1.isnumeric()True>>>s2="123.45">>>s2.isnumeric()False227.2字符串操作(5)isspace方法格式:s.isspace()作用:如果字符串中只包含空白,则返回True,否则返回False。>>>s1="">>>s1.isspace()True>>>s2="123">>>s2.isspace()False237.2字符串操作24(6)istitle方法格式:s.istitle()作用:如果字符串是标题化的(即所有单词都是以大写字母开头,其余字母均为小写)则返回True,否则返回False。>>>s1="Python程序">>>s1.istitle()True>>>s2="PyCharm">>>s2.istitle()False7.2字符串操作25(7)isupper方法格式:s.isupper()作用:如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回True,否则返回False。>>>s1="我正在学习PYTHON语言">>>s1.isupper()True>>>s2="我正在学习Python语言">>>s2.isupper()False7.2字符串操作26(8)startswith方法格式:s.startswith(str[,start][,end])作用:检查字符串s是否是以指定子字符串str开头,如果是则返回True,否则返回False。start:指定检索开始的起始位置索引为start,如果不指定,则默认从头开始检索;end:指定检索的结束位置索引为end-1,如果不指定,则默认一直检索到结束。>>>s1="">>>s1.startswith("www")True>>>s1.startswith("www",1,10)False>>>s1.startswith("www",0,2)False7.2字符串操作27(9)endswith方法格式:s.endswith(str[,start][,end])作用:检查字符串s指定范围是否是以指定子字符串str结尾,如果是则返回True,否则返回False。start:指定检索开始的起始位置索引为start,如果不指定,则默认从头开始检索;end:指定检索的结束位置索引为end-1,如果不指定,则默认一直检索到结束。>>>s1="">>>s1.endswith("org")True>>>s1.endswith("org",1,13)False7.2字符串操作2.字符串转换方法(1)lower方法格式:s.lower()作用:将字符串s中的所有大写字母转换为小写字母,转换完成后,返回新得到的字符串。如果字符串中原本就都是小写字母,则该方法会返回原字符串。>>>s1="HelloWorld!">>>s2=s1.lower()>>>s1'HelloWorld!'>>>s2'helloworld!'287.2字符串操作(2)upper方法格式:s.upper()作用:将字符串s中的所有小写字母转换为大写字母,转换完成后,返回新得到的字符串。如果字符串中原本就都是大写字母,则该方法会返回原字符串。>>>s1="HelloWorld!">>>s2=s1.upper()>>>s2'HELLOWORLD!'>>>s3="我的英文名字是JACK">>>s4=s3.upper()>>>s4'我的英文名字是JACK'297.2字符串操作(3)capitalize方法格式:s.capitalize()作用:将字符串s的第一个字符转换为大写。>>>s1="python语言">>>s1.capitalize()'Python语言'>>>s1'python语言'307.2字符串操作(4)swapcase方法格式:s.swapcase()作用:将字符串s中大写字母转换为小写字母,小写字母转换为大写字母。>>>s1="Python语言">>>s1.swapcase()'pYTHON语言'317.2字符串操作(5)title方法格式:s.title()作用:将字符串s中每个单词的首字母转为大写,其他字母全部转为小写,转换完成后,此方法会返回转换得到的字符串。如果字符串中没有需要被转换的字符,此方法会将字符串原封不动地返回。>>>s1="jetBrainspyCharm">>>s1.title()'JetbrainsPycharm'327.2字符串操作3.字符串查找、替换方法(1)find方法格式:s.find(str[,start][,end])作用:返回str在字符串s指定范围内首次出现的位置,如果不存在则返回-1。start:指定查找开始的起始位置索引为start,如果不指定,则默认从头开始查找;end:指定查找的结束位置索引为end-1,如果不指定,则默认一直查找到结束。>>>s1='JetbrainsPycharm'>>>s1.find('a')5>>>s1.find('a',10,14)-1>>>s1.find('a',10,15)14337.2字符串操作(2)rfind方法格式:s.rfind(str[,start][,end])作用:和find()方法类似,不过是从右边开始查找。>>>s1='JetbrainsPycharm'>>>s1.rfind('a')14347.2字符串操作(3)index方法格式:s.index(str[,start][,end])作用:跟find()方法一样,只不过如果str不在字符串中会报一个异常。>>>s1="catdogcatdog">>>s1.index('at')1>>>s1.index('m')Traceback(mostrecentcalllast):File"<pyshell#132>",line1,in<module>s1.index('m')ValueError:substringnotfound357.2字符串操作(4)rindex方法格式:s.rindex(str[,start][,end])作用:和index()方法类似,不过是从右边开始查找。start:指定查找开始的起始位置索引为start,如果不指定,则默认从头开始查找;end:指定查找的结束位置索引为end-1,如果不指定,则默认一直查找到结束。>>>s1="catdogcatdog">>>s1.rindex('at')7367.2字符串操作(5)replace方法格式:s.replace(str1,str2[,max])作用:把字符串s中的str1替换成str2。如果max指定值,则替换不超过max次。>>>s1="中国梦中国强中国制造">>>s1.replace("中国","China")'China梦China强China制造'>>>s1.replace("中国","China",2)'China梦China强中国制造'377.2字符串操作(6)maketrans方法格式:str.maketrans(str1,str2)作用:创建字符映射表,str1表示需要转换的若干个字符,str2表示转换到的目标。>>>t=str.maketrans("1234","ABCD")>>>t{49:65,50:66,51:67,52:68}#映射表中显示的是字符的UTF-8编码387.2字符串操作(7)translate方法格式:s.translate(table)作用:根据table给出的映射表转换字符串中的字符,返回转换后的字符串。>>>t=str.maketrans("1234","ABCD")>>>s='12983225467'>>>s.translate(t)'AB98CBB5D67'397.2字符串操作4.字符串截取、分割方法(1)lstrip方法格式:s.lstrip([str])作用:从字符串s左边截掉指定子串。str为指定子串,默认为空格。>>>s1="计算机科学">>>s1.lstrip()'计算机科学'>>>s2="ABABabcABabcABAB">>>s2.lstrip('AB')'abcABabcABAB'407.2字符串操作(2)rstrip方法格式:s.rstrip([str])作用:从字符串s右边截掉指定子串。str为指定子串,默认为空格。>>>s1="计算机科学">>>s1.rstrip()'计算机科学'>>>s2="ABABabcABabcABAB">>>s2.rstrip('AB')'ABABabcABabc'417.2字符串操作(3)strip方法格式:strip([str])作用:截掉字符串s左右两侧指定的子串。str为指定子串,默认为空格。>>>s1="计算机科学">>>s1.strip()'计算机科学'>>>s2="ABABabcABabcABAB">>>s2.strip('AB')'abcABabc'427.2字符串操作(4)split方法格式:s.split(str[,num])作用:以str为分隔符把字符串从左往右分隔成多个字符串,并返回包含分隔结果的列表。如果num有指定值,则仅分割为num+1个子字符串。>>>s1="12,56.7,AB,学院">>>s1.rsplit(',')['12','56.7','AB','学院']>>>s1.rsplit(',',2)['12,56.7','AB','学院']437.2字符串操作(5)rsplit方法格式:s.rsplit(str[,num])作用:以str为分隔符把字符串从右往左分隔成多个字符串,并返回包含分隔结果的列表。如果num有指定值,则仅分割为num+1个子字符串。>>>s1.split(',')['12','56.7','AB','学院']>>>s1.split(',',2)['12','56.7','AB,学院']447.3正则表达式7.3.1正则表达式语法正则表达式是指一个用来描述或者匹配一系列符合某个句法规则的字符串的特殊字符序列。正则表达式由元字符及其不同组合来构成,通过巧妙地构造正则表达式可以匹配任意字符串,能帮助你方便的检查一个字符串是否与某种模式匹配,并完成查找、替换、分隔等复杂的字符串处理任务。在软件开发过程中,经常会涉及到大量的关键字等各种字符串的操作,使用正则表达式能很大程度的简化开发的复杂度和开发的效率。457.3正则表达式表7-4正则表达式元字符46方法描述.匹配除换行符以外的任意一个字符^匹配以^后面的字符或子模式开头的字符串$匹配以$后面的字符或子模式结尾的字符串?匹配位于?之前的字符或子模式0次或1次*匹配位于*之前的字符或子模式0次或更多次+匹配位于+之前的字符或子模式1次或更多次|匹配位于|之前或之后的字符或子模式\d匹配任何十进制数字,等效于[0-9]\D与\d相反,匹配任何非十进制数字的字符,等效于[^0-9]\s匹配任何空白字符(空格、换行、回车、换页、制表符),等效于[\t\n\r\f\v]\S与\s相反,匹配任何非空白字符,等效于[^\t\n\r\f\v]\w匹配任何字母、数字和下划线\W于\w相反,匹配除字母、数字和下划线以外的字符7.3正则表达式47方法描述\b匹配单词的开始或结束\B与\b相反{n}重复n次{n,}重复n次或更多次{n,m}重复n~m次()将位于()内的内容作为一个整体对待[abc]匹配a、b、c中的任意一个字符[^abc]匹配除a、b、c之外的任意字符[a-z]匹配指定范围内的任意字符[^a-z]匹配指定范围外的任意字符7.3正则表达式下面给出一些正则表达式的示例:'[\u4e00-\u9fa5]'匹配中文字符。'^\s*|\s*$'匹配首尾空白字符。'[a-zA-Z]'匹配任意一个大写或小写字母。'^[A-Za-z]+$'匹配由26个英文字母组成的字符串。'^\d{3,4}-\d{7,8}$'匹配国内座机电话号码,匹配形式010-87881122。'[1-9]\d{5}(?!\d)'匹配中国邮政编码(6位数字)。'^[a-zA-Z][a-zA-Z0-9_]{4,15}$'匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)。'\d{4}-\d{1,2}-\d{1,2}'匹配“yyyy-mm-dd”格式的日期,例如'2020-5-21'。'\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*'匹配Email地址。'^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$'匹配IP地址。487.3正则表达式7.3.2正则表达式模块re49方法描述match(pattern,string[,flags])从字符串的起始位置匹配模式,匹配成功返回match对象,不成功返回Nonesearch(pattern,string[,flags])在整个字符串中匹配模式,匹配成功返回第一个成功的匹配(match对象),不成功返回Nonefindall(pattern,string[,flags])在整个字符串中匹配模式,并以列表返回所有匹配成功的数据compile(pattern[,flags])使用任何可选的标记来编译正则表达式的模式,返回一个正则表达式对象split(pattern,string[,max])根据模式分割字符串,返回成功匹配的列表,max指定最多分割次数sub(pattern,repl,string[,count])将字符串中所有pattern的匹配项用repl替换,返回新字符串,count指定替换次数表7-5re模块常用方法7.3正则表达式参数意义:pattern:匹配的正则表达式。string:要匹配的字符串。flags:标识位,用于控制正则表达式的匹配方式,其值有:re.I:忽略大小写。re.L:做本地化识别。re.M:多行匹配,影响^和$。re.S:使元字符“.”匹配包括换行符在内的所有字符。re.U:根据Unicode字符集解析字符,影响\w、\W、\b、\B。re.X:使我们以更灵活的格式理解正则表达式。507.3正则表达式下面的代码演示了re模块常用方法的功能。>>>re.match("www","")<_sre.SRE_Matchobject;span=(0,3),match='www'>>>>re.search("luck","Badluck,goodluck")#返回第一个成功的匹配<_sre.SRE_Matchobject;span=(4,8),match='luck'>>>>re.findall(r"y{2,4}","ytestyytestyyytestyyyy")#匹配2到4个y['yy','yyy','yyyy']>>>s="How-are-you!">>>re.split('[-]+',s)#以一个或连续多个“-”作为分隔符分割字符串['How','are','you!']>>>phone="139-5312-9596">>>re.sub(r'\D',"",phone)#去掉电话号码之间的短横线517.3正则表达式7.3.3正则表达式对象match52方法描述group返回匹配的一个或多个子模式内容groups()返回一个包含匹配的所有子模式内容的元组groupdict()返回包含匹配的所有命名子模式内容的字典start()返回指定子模式内容的起始位置end()返回指定子模式内容的结束位置的前一个位置span()返回一个包含指定子模式内容起始位置和结束位置前一个位置的元组正则表达式对象的match方法和search方法匹配成功后返回match对象实例。match对象的常用方法见表7-6。表7-6match对象的常用方法7.3正则表达式1.使用Match对象处理分组group(),groups()和groupdict()方法都是处理在正则表达式中使用"()"分组的情况。不同的是,group()一般带有参数,其参数为分组的编号。含有一个参数的时候,返回参数对应分组的对象;含有多个参数的时候,以元组的形式返回参数对应的分组;不含参数或参数为0的时候,返回整个匹配对象。而groups()和groupdict()一般不需要向其传递参数,groups()的返回值为元组。groupdict()的返回值为字典。537.3正则表达式>>>importre>>>s=re.match(r"(\w+)(\w+)(\w+)","Behindbadluckcomesgoodluck.")>>>s.group()'Behindbadluck'>>>s.group(0)'Behindbadluck'>>>s.group(1)'Behind'>>>s.group(2)'bad'>>>s.group(2,3)('bad','luck')>>>s.groups()('Behind','bad','luck')>>>t=r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年特种设备安全管理人员培训考试试卷及答案(共十九套)
- 广东高考:语文必背知识点总结
- 张贻端《火脉的传承》阅读答案
- 2026年国际贸易法规与实务试题
- 2026年高考英语考题试卷及答案
- 摩根士丹利-日本制药行业投资者演示报告-Investor PresentationJapan Pharmaceuticals-20260409
- 正心诚意:为大学生道德教育注入儒学智慧
- 正交频分复用系统中信道估计技术的多维度探究与实践
- 主题22 万象自然 (Wonders of Nature)- 2026年初中英语中考主题作文满分训练
- 欧洲经济一体化的福利效应:理论、实践与启示
- GB/T 47241-2026虚拟电厂技术导则
- DZ∕T 0211-2020 矿产地质勘查规范 重晶石、毒重石、萤石、硼(正式版)
- 官兵心理健康档案模版
- GB/T 8834-2006绳索有关物理和机械性能的测定
- 基础工程连续基础课件
- 真分数和假分数-完整版课件
- 1.《郑人买履》课件PPT
- GB∕T 36110-2018 文物展柜密封性能及检测
- 甘肃省生态功能区划
- 模拟电子技术基础 第四章 放大电路的频率响应
- 江苏职业工种分类
评论
0/150
提交评论