《Python語(yǔ)言程序設(shè)計(jì)》 課件 第5章 字符串_第1頁(yè)
《Python語(yǔ)言程序設(shè)計(jì)》 課件 第5章 字符串_第2頁(yè)
《Python語(yǔ)言程序設(shè)計(jì)》 課件 第5章 字符串_第3頁(yè)
《Python語(yǔ)言程序設(shè)計(jì)》 課件 第5章 字符串_第4頁(yè)
《Python語(yǔ)言程序設(shè)計(jì)》 課件 第5章 字符串_第5頁(yè)
已閱讀5頁(yè),還剩59頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第5章字符串與正則表達(dá)式第5章

字符串5.1字符串編碼5.2字符串的索引和切片5.3字符串的操作5.4正則表達(dá)式1.Unicode碼Unicode編碼標(biāo)準(zhǔn)為表達(dá)全世界所有語(yǔ)言的任意字符而設(shè)計(jì),它使用4字節(jié)的數(shù)字編碼來(lái)表達(dá)每個(gè)字母、符號(hào)或文字。5.1字符串編碼2.UTF-8碼UTF-8是一種為Unicode字符設(shè)計(jì)的變長(zhǎng)編碼系統(tǒng),即不同的字符可使用不同數(shù)量的字節(jié)編碼。對(duì)于ASCII字符,UTF-8僅使用1個(gè)字節(jié)來(lái)編碼。UTF-8支持中英文編碼,英文系統(tǒng)也可以顯示中文。Python支持UTF-8編碼,中文字符、希臘字母均可以作為標(biāo)識(shí)符使用。例如:>>>單價(jià)=13>>>數(shù)量=100>>>print(單價(jià)*數(shù)量)1300兩個(gè)內(nèi)置函數(shù)ord()函數(shù):將一個(gè)字符轉(zhuǎn)化為Unicode碼>>>ord("中")20013>>>print("?是白羊座的符號(hào),其Unicode碼是",ord("?"))?是白羊座的符號(hào),其Unicode碼是9800chr()函數(shù):將一個(gè)整數(shù)轉(zhuǎn)換為Unicode字符。>>>chr(10005),chr(10004)('?','?’)>>>print("金牛座的Unicode碼是9801,其符號(hào)為",chr(9801))金牛座的Unicode碼是9801,其符號(hào)為?

5.2.1字符串的索引字符串是一種元素為字符的序列類型。5.2字符串的索引與分片注意:索引編號(hào)要求為整數(shù),且不能越界。索引編號(hào):正索引:從左向右編號(hào),最左邊的字符編號(hào)為0,最后一個(gè)字符的編號(hào)比長(zhǎng)度小1。負(fù)索引:從右向左編號(hào),最右邊的字符編號(hào)為-1。通過索引編號(hào)可以獲取字符串中的某個(gè)字符。格式:字符串變量名[索引編號(hào)]例如:s[2]、s[-1]在Python中,字符串是不可變對(duì)象,不能用下標(biāo)賦值的方式去改變字符串.>>>s="python">>>s[0]="P"Traceback(mostrecentcalllast):File"<pyshell#17>",line1,in<module>s[0]="P"TypeError:'str'objectdoesnotsupportitemassignment【例5-1】獲取星期字符串。weekStr="一二三四五六日"weekId=eval(input("請(qǐng)輸入星期數(shù)字(1~7):"))print("星期"+weekStr[weekId-1])【例5-2】編寫一個(gè)程序,判斷一個(gè)字符串是否為“回文”(順讀和倒讀都一樣的字符串稱為“回文”)。如果輸入字符串是回文,則輸出“yes”;如果字符串不是回文,則輸出“no”。例如:ABCBA或者AACCAA是回文字符串;ABCCA或者AABBCC不是回文字符串。a=input("請(qǐng)輸入一個(gè)字符串:")n=len(a)i,j,f=0,-1,1whilei<n/2:ifa[i]!=a[j]:f=0breaki=i+1j=j-1iff==1:print("yes")else:print("no")5.2.2字符串的切片字符串的分片就是從給定的字符串中分離出部分字符。格式:字符串[M:N:K]其中M是索引起始位置,N是索引結(jié)束位置但不包括N位置上的字符,索引編號(hào)每次增加的步長(zhǎng)為K。>>>s="0123456789987654321">>>s[0:8:2]'0246'>>>s[-1:-4:-1]'123'>>>s[-9:15:1]'98765'注意:不包括索引結(jié)束位置上的字符。正索引范圍:0~字符串長(zhǎng)度-1負(fù)索引范圍:-字符串長(zhǎng)度~-1當(dāng)索引起始位置i省略時(shí),從0或-1開始。當(dāng)結(jié)束位置j省略時(shí),默認(rèn)到最后一個(gè)字符。當(dāng)步長(zhǎng)k省略時(shí),默認(rèn)為1。>>>s="abcdefg">>>s[5:1:-1]'fedc'>>>s[-len(s):-1]'abcdef‘(5)開始和結(jié)束的索引值可以超過字符串的長(zhǎng)度。>>>s[-100:100]'ABCDEFGHIJK'>>>s="ABCDEFGHIJK">>>s[::]'ABCDEFGHIJK'>>>s[::-1]'KJIHGFEDCBA'>>>s[1::]'BCDEFGHIJK'>>>s[:-1:]'ABCDEFGHIJ'>>>s[::-2]'KIGECA's="teacher",能夠顯示輸出teacher的選項(xiàng)是:(

)。A.print(s[0:-1])B.print(s[-1:0])

C.print(s[:])D.print(s[:6])答案:C設(shè)str="hello",想把字符串的第一個(gè)字母大寫,其他字母還是小寫,正確的選項(xiàng)是:(

)。A.print(str[1].upper()+str[-1:1])B.print(str[0].upper()+str[1:-1])C.print(str[1].upper()+str[2:])D.print(str[0].upper()+str[1:])答案:D【例5-3】用字符串切片的方法解決例題5-2的回文問題。s=input("請(qǐng)輸入一個(gè)字符串")d=s[::-1]ifd==s:print("yes")else:print("no")5.3.1字符串連接操作1.加號(hào)連接操作運(yùn)算符:+字符串連接表達(dá)式的格式是:s1+s2+……+sn例如:>>>"Python"+"語(yǔ)言"+"程序設(shè)計(jì)基礎(chǔ)"'Python語(yǔ)言程序設(shè)計(jì)基礎(chǔ)’5.3字符串的操作>>>"abcd"+1234TypeError:canonlyconcatenatestr(not"int")tostr>>>"abcd"+str(1234)'abcd1234'“1234”+1234的計(jì)算結(jié)果的是()(A)“1234”+1234 (B)“12341234”

(C)2468 (D)提示類型錯(cuò)誤,無(wú)法運(yùn)行答案:D注意:將字符串和數(shù)值數(shù)據(jù)進(jìn)行連接時(shí),需要將數(shù)值數(shù)據(jù)用str()函數(shù)或repr()函數(shù)轉(zhuǎn)換成字符串,再進(jìn)行連接。字符串是不可變類型,其中的字符不能被賦值更改。>>>s=“abcdefg“s[1]=‘8‘TypeError:'str'objectdoesnotsupportitemassignment錯(cuò)誤!如果要把s[1]改為’8’,怎么辦?可以利用連接運(yùn)算新建一個(gè)字符串來(lái)改變!>>>s=“abcdefg“>>>s=s[0]+'8'+s[2::]>>>s'a8cdefg'2.重復(fù)連接格式:s*n或n*s其中s是一個(gè)字符串;n是一個(gè)正整數(shù),代表重復(fù)的次數(shù)。作用:構(gòu)建一個(gè)由其自身字符串重復(fù)連接而成的字符串。例如:>>>"ABCD"*2'ABCDABCD‘注意:連接操作的復(fù)合賦值運(yùn)算符:+=、*=a+=‘a(chǎn)bc‘等價(jià)于a=a+”abc”>>>a="go">>>a*=3>>>b="Ale">>>b*=3>>>a+=b>>>a'gogogoAleAleAle'例5-3從鍵盤輸入5個(gè)字符串,將它們連接成一個(gè)字符串后輸出。s=''foriinrange(0,5):c=input("Pleaseenterastring:")s+=cprint(s)3.成員關(guān)系操作格式為:s1[not]ins2作用:用于判斷字符串s1是否屬于字符串s2,其返回值為True或False.例如:>>>"Hi"in"Hi,Python"True>>>"python"in"Hi,Python"False>>>"。"notin"Hi,Python"Truess='AEIOUaeiou's1=''foriinrange(0,10):s=input("Pleaseinputaword:")

ifs[0]inss:s1+=sprint(s1)例5-4從鍵盤輸入10個(gè)英文單詞,輸出其中以元音字母開頭的單詞。4.r/R原始字符串在字符串的第一個(gè)引號(hào)前加上字母"r"(或"R"),表示所有的字符串都是直接按照字面的意思來(lái)使用,沒有轉(zhuǎn)義或不能打印的字符。>>>print(r"hello\nworld")hello\nworld>>>print("hello\nworld")helloworld5.關(guān)系運(yùn)算在進(jìn)行字符串?dāng)?shù)據(jù)的比較時(shí),遵循以下規(guī)則。(1)單個(gè)字符比較,按字符ASCII碼大小進(jìn)行比較??崭?lt;數(shù)字字符<大寫字母<小寫字母<中文漢字例如:>>>'D'<'B'False>>>'8'>'2'True(2)兩個(gè)相同長(zhǎng)度的字符串的比較是將字符串中的字符從左向右逐個(gè)比較,如果所有字符都相等,則兩個(gè)字符串相等,如果兩個(gè)字符串中有不同的字符,以最左邊的第1對(duì)不同字符的比較結(jié)果為準(zhǔn)。(3)若兩個(gè)字符串中字符個(gè)數(shù)不等時(shí),則將較短的字符串后面補(bǔ)足空格后再比較。>>>'SHANGHAI'<'SHANKONG'True>>>'WHERE'<'WHEREVER'True5.3.2字符串的處理函數(shù)str(x)函數(shù):返回x的字符串形式,

其中x可以是數(shù)字類型或其他類型。>>>str(3.5)'3.5'函數(shù)和方法的比較:相同點(diǎn):都是具有獨(dú)立功能、由若干語(yǔ)句組成的一個(gè)可執(zhí)行程序段。區(qū)別:函數(shù)是結(jié)構(gòu)化程序設(shè)計(jì)中的概念,方法是面向?qū)ο笾械母拍?,是類中的函?shù)。函數(shù)可以通過函數(shù)名直接調(diào)用,如ord(‘A’);而對(duì)象中的方法則要通過對(duì)象名和方法名來(lái)調(diào)用。格式為:對(duì)象名.方法名(參數(shù))>>>s='abc123dfg'>>>s.upper()'ABC123DFG’>>>s'abc123dfg'5.3.3字符串處理方法1.字母大小寫轉(zhuǎn)換s.upper():全部轉(zhuǎn)換為大寫字母。s.lower():全部轉(zhuǎn)換為小寫字母。s.swapcase():字母大小寫互換。s.capitalize():首字母大寫,其余小寫。s.title():每個(gè)單詞的首字母均大寫。5.3.3字符串的常用方法>>>'Abc123Dfg'.upper()'ABC123DFG'>>>'Abc123Dfg'.lower()'abc123dfg'>>>'Abc123Dfg'.swapcase()'aBC123dFG'>>>'Abc123Dfg'.capitalize()'Abc123dfg'>>>'Abc123dfg'.title()'Abc123Dfg'>>str="Hello">>>str.upper()'HELLO'>>>str.lower()'hello'>>>"hello,kitty".title()'Hello,Kitty'>>>"hello,kitty".capitalize()'Hello,kitty'>>>"Hello,Kitty".swapcase()'hELLO,kITTY'2.字符串對(duì)齊處理s.ljust(width,[fillchar]):輸出width個(gè)字符,s左對(duì)齊,右邊不足部分用fillchar填充,默認(rèn)用空格填充。s.rjust(width,[fillchar]):輸出width個(gè)字符,s右對(duì)齊,左邊不足部分用fillchar填充,默認(rèn)用空格填充。s.center(width,[fillchar])輸出width個(gè)字符,s中間對(duì)齊,兩邊不足部分用fillchar填充,默認(rèn)用空格填充。s.zfill(width):把s變成width長(zhǎng),并且右對(duì)齊,左邊不足部分用0補(bǔ)齊。>>>'Abc123dfg'.ljust(20,'*')'Abc123dfg**********'>>>'Abc123dfg'.rjust(20,'*')'**********Abc123dfg'>>>'Abc123dfg'.center(20,'*')'*****Abc123dfg*****'>>>'Abc123dfg'.zfill(20)'0000000000Abc123dfg'用鍵盤輸入字符串s,按要求輸出到屏幕。格式要求:寬度位30個(gè)字符,以星號(hào)填充,居中對(duì)齊。如果輸入字符串超出30位,則全部輸出。、例如:用鍵盤輸入字符串s:”Congratulations”,屏幕輸出:*******Congratulations********方法1:print('{:*^30}'.format(s))方法2:s.center(30,'*')3.字符串查找s.find(substr,[start,[end]]):返回s中出現(xiàn)substr的第1個(gè)字符的編號(hào),如果s中沒有substr則返回-1。start和end作用就相當(dāng)于在s[start:end]中搜索。s.index(substr,[start,[end]]):與find()相同,只是在s中沒有substr時(shí),會(huì)返回一個(gè)運(yùn)行時(shí)錯(cuò)誤。s.rfind(substr,[start,[end]]):返回s中最后出現(xiàn)的substr的第1個(gè)字符的編號(hào),如果s中沒有substr則返回-1,也就是說從右邊算起的第1次出現(xiàn)的substr的首字符編號(hào)。>>>'12341234123'.find('23',4)5>>>'12341234123'.index('23')1>>>'12341234123'.rfind('23',4,8)5s.rindex(substr,[start,[end]]):與rfind()相同,只是在s中沒有substr時(shí),會(huì)返回一個(gè)運(yùn)行時(shí)錯(cuò)誤。s.count(substr,[start,[end]]):計(jì)算substr在s中出現(xiàn)的次數(shù)。s.startswith(prefix[,start[,end]]):是否以prefix開頭,若是返回True,否則返回False。s.endswith(suffix[,start[,end]]):以suffix結(jié)尾,若是返回True,否則返回False。>>>'12341234123'.rindex('23')9>>>'12341234123'.count('23')3>>>'12341234123'.startswith('23',5)True>>>'12341234123'.endswith('3')True>>>s="Hi,Python!Hi,C!">>>s.find("Hi")0>>>s.rfind("Hi")10>>>s.count("Hi")2>>>s.startswith("Hi")True>>>s.startswith("Hi",3)False>>>s.endswith("C!")True4.字符串替換s.replace(oldstr,newstr,[count]):把s中的oldstar替換為newstr,count為替換次數(shù)。這是替換的通用形式,還有一些函數(shù)進(jìn)行特殊字符的替換。s.strip([chars]):把s中前后chars中有的字符全部去掉,可以理解為把s前后chars替換為None。默認(rèn)去掉前后空格。>>>'12341234123'.replace('23',"ab",2)'1ab41ab4123'>>>'*1234*1234*123*'.strip('*')'1234*1234*123's.lstrip([chars]):把s左邊chars中有的字符全部去掉。默認(rèn)去掉左邊空格。s.rstrip([chars]):把s右邊chars中有的字符全部去掉。默認(rèn)去掉右邊空格。>>>'*1234*1234*123*'.lstrip('*')'1234*1234*123*'>>>'*1234*1234*123*'.rstrip('*')'*1234*1234*123'5.字符串的拆分與組合s.split([sep,[maxsplit]]):以sep為分隔符,把字符串s拆分成一個(gè)列表。默認(rèn)的分隔符為空格。maxsplit表示拆分的次數(shù),默認(rèn)取-1,表示無(wú)限制拆分。>>>'蘋果香蕉桔子葡萄'.split()['蘋果','香蕉','桔子','葡萄']>>>'蘋果香蕉桔子葡萄'.split('',1)['蘋果','香蕉桔子葡萄']s.join(seq):把seq代表的序列組合成字符串,用s將序列各元素連接起來(lái)。>>>''.join(['a','b','c','d'])'abcd'>>>s="abcd">>>s=list(s)>>>s[1]='8'>>>s=''.join(s)>>>s'a8cd’注意:修改字符串的方法:6.字符串類型測(cè)試字符串類型測(cè)試函數(shù)返回的都是邏輯值。s.isalnum():是否全是字母和數(shù)字,并至少有一個(gè)字符s.isalpha():是否全是字母,并至少有一個(gè)字符s.isdigit():是否全是數(shù)字,并至少有一個(gè)字符s.isspace():是否全是空格,并至少有一個(gè)字符s.islower():s中的字母是否全是小寫s.isupper():s中的字母是否便是大寫s.istitle():s是否是首字母大寫>>>"HelloWorldHelloPython".isalpha()False>>>"python3".isalnum()True>>>"HelloworldHellopython".istitle()False>>>"HelloWorldHelloPython".istitle()True編寫程序,輸入一段英文句子,統(tǒng)計(jì)其字符個(gè)數(shù),并統(tǒng)計(jì)出其包含多少個(gè)單詞。如輸入“Ilovepython!”,則輸出Thelengthis:14,Thecountis:3。s=input("請(qǐng)輸入一段英文:")#將以下代碼補(bǔ)充完整....................print("Thelengthis:%.f"%len)print("Thecountis:%.f"%count)5.3.4字符串類型的格式化1.format方法格式:

模板字符串.format(參數(shù)0,參數(shù)1,參數(shù)2…)模板字符串由一系列槽{}組成。作用:

將各輸出項(xiàng)按照序號(hào)替換到格式字符串的槽中(序號(hào)從0開始編號(hào))。>>>'{0:.2f},{1}'.format(3.145,500)'3.15,500'槽{}內(nèi)的格式控制符格式:{<參數(shù)序號(hào)>:<填充字符><對(duì)齊方式><輸出寬度><,><.精度><類型>}填充字符:配合“輸出寬度”使用,當(dāng)參數(shù)的寬度小于輸出寬度時(shí),要用填充的字符補(bǔ)滿。缺省時(shí)填充空格。例如:“{0:*^10.2f}”.format(3.1415926)對(duì)齊方式:控制對(duì)齊方式,配合“輸出寬度”使用。<:左對(duì)齊>:右對(duì)齊(默認(rèn))^:居中輸出寬度:指定格式化后的字符串所占的寬度逗號(hào):為數(shù)字添加千分位分隔符精度:指定小數(shù)位的精度類型:字符串:s整數(shù)類型:b(二進(jìn)制),c(Unicode字符),d(十進(jìn)制),o(八進(jìn)制),x或X(十六進(jìn)制)浮點(diǎn)數(shù)類型:e或E(科學(xué)計(jì)數(shù)法),f(浮點(diǎn)數(shù),默認(rèn)保留小數(shù)點(diǎn)后6位),%(浮點(diǎn)數(shù)的百分比形式)>>>"{0:*>10.2f}".format(3.1415926)'******3.14'>>>"{:=^20}".format("PYTHON")'=======PYTHON======='>>>"{:10x}".format(33)'21'>>“六年級(jí)1班的數(shù)學(xué)平均成績(jī)?yōu)閧:.2f},優(yōu)秀率為{:.2%}".format(91.1267,0.1534)'六年級(jí)1班的數(shù)學(xué)平均成績(jī)?yōu)?1.13,優(yōu)秀率為15.34%'>>>"{0:e},{0:.2E}".format(3.1415926)'3.141593e+00,3.14E+00'2.f-string格式化和format方法一樣,都要使用占位符{},它可以把變量、表達(dá)式寫到占位符{}中,變量、表達(dá)式的值會(huì)替換掉占位符。>>>price,num=8,3>>>print(F"這個(gè)商品的單價(jià)是{price}元,數(shù)量是{num},總計(jì){price*num}元")這個(gè)商品的單價(jià)是8元,數(shù)量是3,總計(jì)24元{變量或表達(dá)式:<填充字符><對(duì)齊方式><輸出寬度><.精度><類型>}若要給數(shù)據(jù)設(shè)置格式:>>>pi=3.1415926>>>print(f"{pi:*^10.2f}")***3.14***假設(shè)變量a是一個(gè)浮點(diǎn)數(shù),要遵照"a=xxx.xx"的格式(小數(shù)點(diǎn)后保留兩位)輸出變量a,以下寫法正確的是()(A)print("a=35.45") (B)print("{.2f}".format(a))(C)print("a={:.2f}".format(a)) (D)print("a={}".format(a))用鍵盤輸入字符串s,按要求輸出到屏幕。格式要求:寬度位30個(gè)字符,以星號(hào)填充,居中對(duì)齊。如果輸入字符串超出30位,則全部輸出。、例如:用鍵盤輸入字符串s:”Congratulations”,屏幕輸出:*******Congratulations********程序代碼如下:#請(qǐng)?jiān)赺_____處使用一行代碼或表達(dá)式替換#注意不要修改其他代碼s=input('請(qǐng)輸入一個(gè)字符串:')print(“_________”.format(s))答案:C{:*^30}5.6字符串應(yīng)用舉例例5-11輸入一個(gè)字符串,每次去掉最后面的字符并輸出。程序如下:s=input()foriinrange(-1,-len(s),-1):print(s[:i])輸入:hello輸出:hellhelhehline1=input()line2=""forc1inline1:ifc1.isalpha():i=ord(c1)j=i+5if(j>ord("z")or(j>ord("Z")andj<ord("Z")+6)):j-=26c2=chr(j)line2+=c2else:line2+=c1print(line2)例5-12翻譯密碼。為了保密,常不采用明碼電文,而用密碼電文,按事先約定的規(guī)律將一個(gè)字符轉(zhuǎn)換為另一個(gè)字符,收?qǐng)?bào)人則按相反的規(guī)律轉(zhuǎn)換得到原來(lái)的字符。例如,將字母“A”→“F”,“B”→“G”,“C”→“H”,即將一個(gè)字母變成其后第5個(gè)字母。例如,“HeisinBeijing.”應(yīng)轉(zhuǎn)換為“MjnxnsGjnonsl.”。例5-14從鍵盤輸入幾個(gè)數(shù)字,用逗號(hào)分隔,求這些數(shù)字之和。分析:輸入的數(shù)字當(dāng)作一個(gè)字符串來(lái)處理,首先分離出數(shù)字串,再轉(zhuǎn)換成數(shù)值,這樣就能求和。s=input('請(qǐng)輸入幾個(gè)數(shù)字(用逗號(hào)分隔)')d=s.split(',')sum=0forxind:sum+=float(x)print('sum=',sum)請(qǐng)輸入幾個(gè)數(shù)字(用逗號(hào)分隔)1,2,3,4,5sum=15.05.4正則表達(dá)式正則表達(dá)式是一種字符串的匹配方法,它能夠用來(lái)描述一種字符串的模式。5.4.1正則表達(dá)式的元字符例:1.匹配身份證:(^\d{17}([0-9]|X|x)$),18位身份證號(hào)碼,最后一位是校驗(yàn)位,可能為數(shù)字或字符X.2.匹配國(guó)內(nèi)固定電話號(hào)碼:\d{3,4}-\d{7,8},3.匹配特定數(shù)字^[1-9]\d*$//匹配正整數(shù)^-[1-9]\d*$//匹配負(fù)整數(shù)^-?[1-9]\d*$//匹配整數(shù)^[1-9]\d*|0$//匹配非負(fù)整數(shù)(正整數(shù)+0)^-[1-9]\d*|0$//匹配非正整數(shù)(負(fù)整數(shù)+0)^[1-9]\d*.\d*|0.\d*[1-9]\d*$//匹配正浮點(diǎn)數(shù)^-([1-9]\d*.\d*|0.\d*[1-9]\d*)$//匹配負(fù)浮點(diǎn)數(shù)^-?([1-9]\d*.\d*|0.\d*[1-9]\d*|0?.0+|0)$//匹配浮點(diǎn)數(shù)4.匹配特定字符串:^[A-Za-z]+$//匹配由26個(gè)英文字母組成的字符串^[A-Z]+$//匹配由26個(gè)英文字母的大寫組成的字符串^[a-z]+$//匹配由26個(gè)英文字母的小寫組成的字符串^[A-Za-z0-9]+$//匹配由數(shù)字和26個(gè)英文字母組成的字符串^\w+$//匹配由數(shù)字、26個(gè)英文字母或者下劃線組成的字符串5.日期格式:^\d{4}-\d{1,2}-\d{1,2}5.4.2正則表達(dá)式模塊在Python中,正則表達(dá)式的功能通過re模塊來(lái)實(shí)現(xiàn)。re模塊提供各種正則表達(dá)式的匹配操作,在文本解析、復(fù)雜字符串分析和信息提取時(shí)是一個(gè)非常有用的工具。1.正則表達(dá)式的兩種書寫方式

(1)用“re.函數(shù)名(參數(shù))”調(diào)用函數(shù),直接在參數(shù)里書寫正則表達(dá)式。(2)先用pile()函數(shù)將一個(gè)字符串形式的正則表達(dá)式編譯為正則表達(dá)式對(duì)象,然后使用正則表達(dá)式對(duì)象提供的方法進(jìn)行字符串處理。語(yǔ)法格式如下:對(duì)象名=pile(pattern,flags=0)參數(shù)

pattern可以取的值如下所示:

re.I、re.IGNORECASE:忽略大小寫。re.M、re.MULTILINE:多行模匹配模式re.S、re.DOTALL:匹配包括換行在內(nèi)的所有字符。re.L、re.LOCALE:做本地化識(shí)別(locale-aware)匹配。re.U、re.UNICODE:根據(jù)Unicode字符集解析字符,這個(gè)標(biāo)志影響\w、\W、\b、\B、\d、\D。re.X、re.VERBOSE:詳細(xì)模式?!纠?-4】判斷用戶輸入的數(shù)據(jù)是否為整數(shù)importrea=input("請(qǐng)輸入一個(gè)整數(shù):")ifre.match("^-?[1-9]\d*$",a)!=None:print("輸入合法")else:print("輸入非法")【例5-5】用pile方法改寫例5-4。importrea=input("請(qǐng)輸入一個(gè)整數(shù):")regex=pile("^-?[1-9]\d*$")ifregex.match(a)!=None:print("輸入合法")else:print("輸入非法")2.字符匹配和搜索

(1)match()格式1:re.match(pattern,string,flags=0)格式2:正則表達(dá)式對(duì)象.match(string[,pos[,endpos]])【例5-6】re.match()函數(shù)舉例importrea="abc123def"m=re.match("([a-z]*)([0-9]*)([a-z]*)",a)ifm!=None:print(m.group())print(m.group(0))print(m.group(1))print(m.group(2))print(m.group(3))else:print("沒有匹配到")(2)search()函數(shù)格式1:re.search(pattern,string,flags=0)格式2:正則表達(dá)式對(duì)象.search(string[,pos[,endpos]])【例5-8】match函數(shù)和search函數(shù)的比較importres="howDOyoudo?"m1=re.match("DO",s,re.M|re.I)m2=re.search("DO",s,re.M|re.I)ifm1:print(m1.group(),m1.span())else:print("match=None")ifm2:print(m2.group(),m2.span())else:print("search=None")(3)findall()函數(shù)格式1:re.findall(pattern,string,flags=0)格式2:正則表達(dá)式對(duì)象.findall(string[,pos[,endpos]])【例5-9】findall函數(shù)舉例importrer=re.findall("\w+","HappyNewYear,2023")print(r)(4)finditer()函數(shù)格式1:re.finditer(pattern,string,flags=0)格式2:正則表達(dá)式對(duì)象.finditer(string[,pos[,endpos]])【例5-10】finditer函數(shù)舉例importrer=re.finditer("\w+","HappyNewYear")forxinr:print(x.group(),x.span())3.替換匹配的子串(1)sub()函

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論