《Python 程序設(shè)計(jì)(新形態(tài)版)》課件 第5章 字符串和正則表達(dá)式_第1頁(yè)
《Python 程序設(shè)計(jì)(新形態(tài)版)》課件 第5章 字符串和正則表達(dá)式_第2頁(yè)
《Python 程序設(shè)計(jì)(新形態(tài)版)》課件 第5章 字符串和正則表達(dá)式_第3頁(yè)
《Python 程序設(shè)計(jì)(新形態(tài)版)》課件 第5章 字符串和正則表達(dá)式_第4頁(yè)
《Python 程序設(shè)計(jì)(新形態(tài)版)》課件 第5章 字符串和正則表達(dá)式_第5頁(yè)
已閱讀5頁(yè),還剩92頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

學(xué)習(xí)目標(biāo):

1理解字符串的編碼,掌握字符串的創(chuàng)建、轉(zhuǎn)義字符的使用、字符串的截取和字符串的常用方法。了解正則表達(dá)式的概述,理解正則表達(dá)式元字符的語(yǔ)法規(guī)則,并掌握正則表達(dá)式模塊的常用方法和匹配選項(xiàng)編譯標(biāo)志。培養(yǎng)學(xué)生在信息時(shí)代的思維能力、社會(huì)責(zé)任感,提高學(xué)生的信息素養(yǎng)。通過(guò)本章課程的學(xué)習(xí),加深學(xué)生對(duì)傳統(tǒng)文化的認(rèn)識(shí),加強(qiáng)學(xué)生的信息安全意識(shí)。第5章字符串和正則表達(dá)式第5章字符串和正則表達(dá)式5.1字符串 5.2

正則表達(dá)式

23字符串是Python程序中常用的數(shù)據(jù)類型之一,大多數(shù)Python程序涉及字符串處理的內(nèi)容。5.1字符串45.1字符串5.1.1字符串編碼

5.1.2

字符串的創(chuàng)建

5.1.3轉(zhuǎn)義字符的使用

5.1.4

字符串的截取

5.1.5

字符串常用方法

5最早的字符編碼是ASCII碼(AmericanStandardCodeforInformationInterchange,美國(guó)信息交換標(biāo)準(zhǔn)碼),ASCII碼采用1字節(jié)編碼,而且只能對(duì)127個(gè)字符編碼,

即10個(gè)數(shù)字、26個(gè)大小寫(xiě)英文字母和一些其他字符。5.1.1字符串編碼但是,處理中文的漢字時(shí),1字節(jié)明顯是不夠的。1980年,中國(guó)國(guó)家標(biāo)準(zhǔn)總局發(fā)布了《信息交換用漢字編碼字符集》(GB/T2312—1980),采用2字節(jié)表示常用的6763個(gè)漢字和682個(gè)非漢字字符。6在多語(yǔ)言的混合文本中,不同國(guó)家的編碼方式可能會(huì)產(chǎn)生沖突,導(dǎo)致文本中出現(xiàn)亂碼。而Unicode編碼字符集把不同的編碼方式統(tǒng)一到同一套編碼方案里,為每種語(yǔ)言中的每個(gè)字符設(shè)定了統(tǒng)一且唯一的二進(jìn)制編碼,以滿足跨語(yǔ)言、跨平臺(tái)進(jìn)行文本轉(zhuǎn)換和處理的需求,解決了不同編碼方式的沖突問(wèn)題。5.1.1字符串編碼在Unicode編碼方案中,常用的字符用2字節(jié)表示,不常用的字符用3~4字節(jié)表示。這樣的表示方式又產(chǎn)生了新的問(wèn)題,一篇全英文字母的文章,用Unicode編碼比ASCII碼需要多一倍的存儲(chǔ)空間,導(dǎo)致存儲(chǔ)空間浪費(fèi)、傳輸效率低等問(wèn)題。7于是,UTF(UnicodeTransformationFormat,Unicode轉(zhuǎn)換格式)被提出,UTF規(guī)定了Unicode字符集中各類字符的存儲(chǔ)和傳輸格式,常用的格式有UTF-8、UTF-16和UTF-32等。Linux、Python和瀏覽器等采用UTF-8編碼,Windows、Java等采用UTF-16編碼。UTF-8編碼根據(jù)Unicode字符集中字符的分類不同,使其編碼長(zhǎng)度產(chǎn)生相應(yīng)的變化,如,英文字母被編碼為1字節(jié),漢字被編碼為3字節(jié),生僻字符被編碼為4~6字節(jié)。因此,UTF-8編碼又被稱為“可變長(zhǎng)編碼”。5.1.1字符串編碼8針對(duì)單個(gè)字符的編碼,Python提供了兩個(gè)互相轉(zhuǎn)換的內(nèi)置函數(shù),即ord()函數(shù)獲取給定字符的Unicode編碼值,chr()函數(shù)將給定的Unicode編碼值轉(zhuǎn)換為對(duì)應(yīng)的字符。5.1.1字符串編碼>>>ord("中"),ord("1"),ord("a")

#獲取單個(gè)字符的Unicode編碼值(20013,49,97)>>>ord("中國(guó)") #不是單個(gè)字符,會(huì)引發(fā)TypeError異常TypeError:ord()expectedacharacter,butstringoflength2found.>>>chr(20013),chr(49),chr(97)#返回Unicode編碼值所對(duì)應(yīng)的字符('中','1','a')9Python語(yǔ)言中,字符串有2種不同的形式,即str類型和bytes類型。str類型通常用于表示Unicode字符序列,能夠直觀地閱讀和理解。而bytes類型則將字符序列編碼,并以字節(jié)序列的形式表示,主要用于字符序列的存儲(chǔ)和傳輸。5.1.1字符串編碼10將str類型轉(zhuǎn)換為bytes類型,可以使用str類型的.encode()方法進(jìn)行轉(zhuǎn)換。該方法會(huì)按照指定的字符編碼將字符串轉(zhuǎn)換為對(duì)應(yīng)的字節(jié)序列,并返回一個(gè)新的bytes對(duì)象。5.1.1字符串編碼>>>"CHINA".encode("UTF-8")#str類型轉(zhuǎn)換為bytes類型b'CHINA'>>>"中國(guó)".encode("UTF-8")#str類型轉(zhuǎn)換為bytes類型b'\xe4\xb8\xad\xe5\x9b\xbd'11將bytes類型轉(zhuǎn)換為str類型,可以使用bytes類型的.decode()方法進(jìn)行轉(zhuǎn)換。該方法會(huì)按照指定的字符編碼將字節(jié)序列解碼為對(duì)應(yīng)的字符串,并返回一個(gè)新的str對(duì)象。5.1.1字符串編碼>>>b'CHINA'.decode("UTF-8")#bytes類型轉(zhuǎn)換為str類型'CHINA'>>>b'\xe4\xb8\xad\xe5\x9b\xbd'.decode("UTF-8")#bytes類型轉(zhuǎn)換為str類型'中國(guó)'121.賦值法賦值法創(chuàng)建字符串,使用英文單引號(hào)、英文雙引號(hào)或英文三引號(hào)其中之一作為定界符進(jìn)行創(chuàng)建。基本語(yǔ)法格式如下所示:5.1.2字符串的創(chuàng)建字符串名='字符序列'或:字符串名="字符序列"或:字符串名='''字符序列'''13賦值法創(chuàng)建字符串的示例代碼如下所示:5.1.2字符串的創(chuàng)建>>>str1=''#創(chuàng)建名為str1的空字符串>>>str1''>>>str2='ILOVECHINA'#創(chuàng)建名為str2的字符串>>>str2'ILOVECHINA'>>>str3="天下興亡,匹夫有責(zé)。"#創(chuàng)建名為str3的字符串>>>str3'天下興亡,匹夫有責(zé)。'14另外,英文三引號(hào)或3個(gè)英文雙引號(hào)為定界符時(shí)可以換行創(chuàng)建字符串。示例代碼如下所示:5.1.2字符串的創(chuàng)建>>>#創(chuàng)建名為str4的字符串,字符串分兩行輸入>>>str4='''綠水青山就是金山銀山'''>>>str4'綠水青山\n就是金山銀山'#字符串中的\n為轉(zhuǎn)義字符,表示換行155.1.2字符串的創(chuàng)建>>>#創(chuàng)建名為str5的字符串,字符串分兩行輸入>>>str5="""人民有信仰,民族有希望,國(guó)家有力量。""">>>str5'人民有信仰,\n民族有希望,國(guó)家有力量。'#字符串中的\n為轉(zhuǎn)義字符,表示換行162.函數(shù)法使用內(nèi)置函數(shù)str()進(jìn)行字符串的創(chuàng)建?;菊Z(yǔ)法格式如下所示:5.1.2字符串的創(chuàng)建字符串名=str(可迭代對(duì)象)該函數(shù)將可迭代對(duì)象轉(zhuǎn)化為字符串,參數(shù)是可迭代對(duì)象如字符串、列表、元組、字典等。17函數(shù)法創(chuàng)建字符串的示例代碼如下所示:5.1.2字符串的創(chuàng)建>>>str6=str()#創(chuàng)建名為str6的空字符串>>>str6''>>>str7=str('CHINA')#創(chuàng)建名為str7的字符串>>>str7'CHINA'>>>str8=str([1,2,3])#創(chuàng)建名為str8的字符串>>>str8'[1,2,3]'18如果字符串本身就包含與定界符相同的元素,就會(huì)引發(fā)SyntaxError異常。示例代碼如下所示:5.1.3轉(zhuǎn)義字符的使用>>>#字符串本身包含與定界符相同的元素,會(huì)引發(fā)SyntaxError異常>>>strA='We'reChinese.'SyntaxError:unterminatedstringliteral.19為了避免上述的錯(cuò)誤,可以采用以下兩種解決辦法。(1)如果字符串中包含英文的單引號(hào),那么整個(gè)字符串的邊界符需要使用英文的雙引號(hào);如果字符串中包含英文的雙引號(hào),那么整個(gè)字符串的邊界符需要使用英文的單引號(hào)。5.1.3轉(zhuǎn)義字符的使用>>>strA="We'reChinese."#字符串中的符號(hào)和邊界符不同>>>strA"We'reChinese."20(2)如果字符串中包含英文的單引號(hào)或雙引號(hào),可以在字符串中的引號(hào)之前添加反斜杠(\),對(duì)字符串中的引號(hào)進(jìn)行轉(zhuǎn)義,表示反斜杠后的引號(hào)是字符串中的一個(gè)普通字符,而不是字符串的邊界符。5.1.3轉(zhuǎn)義字符的使用>>>strA='We\'reChinese.'#字符串中的\'表示普通字符'>>>strA"We'reChinese.">>>strB="荀子曾言:\"學(xué)無(wú)止境,至死方休。\""#字符串中的\"表示普通字符">>>strB'荀子曾言:"學(xué)無(wú)止境,至死方休。"'21字符串中含有其他轉(zhuǎn)義字符(如換行符或反斜杠符等)時(shí)的處理方法。5.1.3轉(zhuǎn)義字符的使用>>>print("人民有信仰\n民族有希望\n國(guó)家有力量")#字符串中含有換行符

人民有信仰民族有希望國(guó)家有力量

>>>print("C:\\Python\\Python310")#字符串中含有反斜杠符C:\Python\Python31022【例5.1】編寫(xiě)程序,使用單引號(hào)或雙引號(hào)作為字符串的定界符,通過(guò)print()語(yǔ)句實(shí)現(xiàn)以下內(nèi)容的正確輸出。四個(gè)意識(shí):"政治意識(shí)\大局意識(shí)\核心意識(shí)\看齊意識(shí)"四個(gè)自信:'道路自信

理論自信

制度自信

文化自信'5.1.3轉(zhuǎn)義字符的使用#字符串定界符為''print('四個(gè)意識(shí):"政治意識(shí)\\大局意識(shí)\\核心意識(shí)\\看齊意識(shí)"')#字符串定界符為""print("四個(gè)意識(shí):\"政治意識(shí)\\大局意識(shí)\\核心意識(shí)\\看齊意識(shí)\"")#字符串定界符為""print("四個(gè)自信:'道路自信

理論自信

制度自信

文化自信'")23運(yùn)行結(jié)果如下所示:5.1.3轉(zhuǎn)義字符的使用#字符串定界符為''print('四個(gè)自信:\'道路自信

理論自信

制度自信

文化自信\'')四個(gè)意識(shí):"政治意識(shí)\大局意識(shí)\核心意識(shí)\看齊意識(shí)"四個(gè)意識(shí):"政治意識(shí)\大局意識(shí)\核心意識(shí)\看齊意識(shí)"四個(gè)自信:'道路自信

理論自信

制度自信

文化自信'四個(gè)自信:'道路自信

理論自信

制度自信

文化自信'24字符串的截取就是取出字符串中的子串。字符串的截取方法有兩種:第一種是通過(guò)索引的方式進(jìn)行單個(gè)字符的提??;第二種是通過(guò)切片的方式取出一段字符。5.1.4字符串的截取1.字符串的索引字符串是一個(gè)字符序列,可以通過(guò)索引的方式提取字符串中的單個(gè)字符。字符串的索引分為正向索引和反向索引。正向索引是把字符串中的字符從左向右進(jìn)行編號(hào),即第一個(gè)字符的索引號(hào)為0,第二個(gè)字符的索引號(hào)為1等,以此類推。反向索引是把字符串中的字符從右向左進(jìn)行編號(hào),即最后一個(gè)字符的索引號(hào)為?1,倒數(shù)第二個(gè)字符的索引號(hào)為?2等,以此類推。25字符串索引的語(yǔ)法格式如下所示:5.1.4字符串的截取字符串對(duì)象名[n]其中,n表示字符序列的索引號(hào)。正向索引時(shí),索引范圍是[0,len(字符串對(duì)象名)),為一個(gè)左閉右開(kāi)的區(qū)間;反向索引時(shí),索引范圍是[?len(字符串對(duì)象名),?1],為一個(gè)閉區(qū)間。示例代碼如下所示:>>>strC='仁義禮智信是指:仁愛(ài)

忠義

禮和

睿智

誠(chéng)信'>>>len(strC)#計(jì)算字符串長(zhǎng)度,漢字、符號(hào)、空格都按1個(gè)字符長(zhǎng)度計(jì)算23265.1.4字符串的截取>>>strC='仁義禮智信是指:仁愛(ài)

忠義

禮和

睿智

誠(chéng)信'>>>strC[0]#輸出索引號(hào)為0的字符'仁'>>>strC[-2]#輸出索引號(hào)為-2的字符'誠(chéng)'>>>strC[23]#索引號(hào)大于或等于字符串長(zhǎng)度時(shí),會(huì)引發(fā)IndexError異常IndexError:stringindexoutofrange.>>>strC['信']#字符串索引號(hào)必須是整數(shù),否則會(huì)引發(fā)TypeError異常TypeError:stringindicesmustbeintegers.272.字符串的切片字符串是不可變序列,即字符串中的字符不允許修改。但是,可以通過(guò)切片操作的方式來(lái)提取字符串的子串。字符串切片操作的語(yǔ)法格式如下所示:5.1.4字符串的截取字符串對(duì)象名[開(kāi)始索引號(hào):結(jié)束索引號(hào):步長(zhǎng)]切片操作以冒號(hào)分割開(kāi)始索引號(hào)、結(jié)束索引號(hào)和步長(zhǎng),遵循“左閉右開(kāi)”原則,即開(kāi)始索引號(hào)所指定的字符會(huì)包含在切片內(nèi),而結(jié)束索引號(hào)所指定的字符不會(huì)包含在切片內(nèi)。28切片操作如果沒(méi)有指定開(kāi)始索引號(hào),則默認(rèn)為0;如果沒(méi)有指定結(jié)束索引號(hào),則默認(rèn)為字符串的長(zhǎng)度;如果沒(méi)有指定步長(zhǎng),則默認(rèn)為1。示例代碼如下所示:5.1.4字符串的截取>>>strC='仁義禮智信是指:仁愛(ài)

忠義

禮和

睿智

誠(chéng)信'>>>len(strC) #計(jì)算字符串長(zhǎng)度,漢字、符號(hào)、空格都按1個(gè)字符長(zhǎng)度計(jì)算23>>>strC[0:22] #返回索引號(hào)位于[0,22)區(qū)間內(nèi)的字符'仁義禮智信是指:仁愛(ài)

忠義

禮和

睿智

誠(chéng)'295.1.4字符串的截取>>>strC[:] #等價(jià)于strC[::]或strC[0:23:1],返回原字符串所有字符'仁義禮智信是指:仁愛(ài)

忠義

禮和

睿智

誠(chéng)信'>>>strC[9:] #等價(jià)于strC[9:23]或strC[9:23:1],返回從索引號(hào)9到末尾的所有字符'仁愛(ài)

忠義

禮和

睿智

誠(chéng)信'>>>strC[:5] #等價(jià)于strC[0:5]或strC[0:5:1],返回索引號(hào)位于[0,5)區(qū)間內(nèi)的字符'仁義禮智信'>>>strC[5:5] #返回空字符串''30需要注意的是,從左向右進(jìn)行正向切片時(shí),步長(zhǎng)要求為正數(shù),否則切片操作的結(jié)果為空字符串。示例代碼如下所示:5.1.4字符串的截取>>>strC='仁義禮智信是指:仁愛(ài)

忠義

禮和

睿智

誠(chéng)信'>>>strC[0:5:1]#正向切片,步長(zhǎng)為正數(shù),返回索引號(hào)位于[0,5)區(qū)間內(nèi)的字符'仁義禮智信'>>>strC[0:5:-1]#正向切片,步長(zhǎng)為負(fù)數(shù),切片結(jié)果為空字符串''31需要注意的是,從右向左進(jìn)行反向切片時(shí),步長(zhǎng)要求為負(fù)數(shù),否則切片操作的結(jié)果為空字符串。示例代碼如下所示:5.1.4字符串的截取>>>strC='仁義禮智信是指:仁愛(ài)

忠義

禮和

睿智

誠(chéng)信'>>>strC[-1:-15:-3]#反向切片,步長(zhǎng)為負(fù)數(shù),返回索引號(hào)位于[-1,-15)區(qū)間內(nèi),間隔為-3的字符

'信智和義愛(ài)'>>>strC[-1:-15:3]#反向切片,步長(zhǎng)為正數(shù),切片結(jié)果為空字符串

''32【例5.2】對(duì)聯(lián),也稱“楹聯(lián)”或“春聯(lián)”等,是我國(guó)傳統(tǒng)文化的瑰寶,2006年國(guó)務(wù)院把楹聯(lián)習(xí)俗列為第一批國(guó)家級(jí)非物質(zhì)文化遺產(chǎn)名錄。編寫(xiě)程序,判斷輸入的對(duì)聯(lián)是否為回文聯(lián)。例如,"霧鎖山頭山鎖霧","天連水尾水連天"是回文聯(lián)。"金木水火土,生宇宙萬(wàn)物","仁義禮智信,鑄人世五常"不是回文聯(lián)。5.1.4字符串的截取33示例代碼如下所示:5.1.4字符串的截取s=input("請(qǐng)輸入一段話(輸入\"退出\"終止程序):")whiles!="退出":ifs==s[::-1]:print("這句話是回文聯(lián)")else:print("這句話不是回文聯(lián)")s=input("請(qǐng)輸入一段話(輸入\"退出\"終止程序):")34運(yùn)行結(jié)果如下所示:5.1.4字符串的截取請(qǐng)輸入一段話(輸入"退出"終止程序):霧鎖山頭山鎖霧這句話是回文聯(lián)請(qǐng)輸入一段話(輸入"退出"終止程序):仁義禮智信,鑄人世五常這句話不是回文聯(lián)請(qǐng)輸入一段話(輸入"退出"終止程序):退出35在Python中,有很多對(duì)字符串進(jìn)行操作的方法,這些方法的名稱可以使用內(nèi)置函數(shù)dir()進(jìn)行查看。示例代碼如下所示:5.1.5字符串常用方法>>>importstring#導(dǎo)入string標(biāo)準(zhǔn)庫(kù)>>>dir('srting')#該函數(shù)的參數(shù)為模塊名'srting'['__add__','__class__','__contains__','__delattr__','__dir__','__doc__','__eq__','__format__','__ge__','__getattribute__','__getitem__','__getnewargs__','__gt__','__hash__','__init__','__init_subclass__','__iter__','__le__','__len__','__lt__','__mod__','__mul__','__ne__','__new__','__reduce__','__reduce_ex__','__repr__','__rmod__','__rmul__','__setattr__','__sizeof__','__str__','__subclasshook__','capitalize',365.1.5字符串常用方法'casefold','center','count','encode','endswith','expandtabs','find','format','format_map','index','isalnum','isalpha','isascii','isdecimal','isdigit','isidentifier','islower','isnumeric','isprintable','isspace','istitle','isupper','join','ljust','lower','lstrip','maketrans','partition','removeprefix','removesuffix','replace','rfind','rindex','rjust','rpartition','rsplit','rstrip','split','splitlines','startswith','strip','swapcase','title','translate','upper','zfill']37在Python中,可以通過(guò)內(nèi)置函數(shù)help()查詢字符串對(duì)象方法的用法。示例代碼如下所示:5.1.5字符串常用方法>>>help(str.lower)#查詢字符串對(duì)象lower()方法的用法Helponmethod_descriptor:lower(self,/)Returnacopyofthestringconvertedtolowercase.38此外,在Python中,查詢字符串對(duì)象方法的用法,也可以通過(guò)一段程序代碼實(shí)現(xiàn)?!纠?.3】編寫(xiě)程序,輸入要查詢的字符串對(duì)象的方法名稱,顯示相對(duì)應(yīng)的結(jié)果。5.1.5字符串常用方法importbuiltins#導(dǎo)入builtins模塊function_name=input("請(qǐng)輸入要查詢的字符串對(duì)象的方法名稱:")try:help(getattr(builtins.str,function_name))#調(diào)用內(nèi)置函數(shù)getattr()獲取字符串對(duì)象的方法名稱function_nameexceptAttributeErrorase:print("未找到字符串對(duì)象的方法名稱!")39運(yùn)行結(jié)果如下所示:5.1.5字符串常用方法請(qǐng)輸入要查詢的字符串對(duì)象的方法名稱:lowerHelponmethod_descriptor:lower(self,/)Returnacopyofthestringconvertedtolowercase.再次運(yùn)行程序,結(jié)果如下所示:請(qǐng)輸入要查詢的字符串對(duì)象的方法名稱:Upper未找到字符串對(duì)象的方法名稱!40常用的字符串方法有以下5種。1.字符串大小寫(xiě)轉(zhuǎn)換字符串大小寫(xiě)轉(zhuǎn)換常用方法如下表所示:5.1.5字符串常用方法41【例5.4】編寫(xiě)程序,對(duì)字符串"天生我材必有用:Allthingsintheirbeingaregoodforsomething."進(jìn)行字符串大小寫(xiě)轉(zhuǎn)換。5.1.5字符串常用方法s="天生我材必有用:Allthingsintheirbeingaregoodforsomething."print(s.lower())#將字符串中所有字母轉(zhuǎn)為小寫(xiě)字母print(s.upper())#將字符串中所有字母轉(zhuǎn)為大寫(xiě)字母

print(s.capitalize())#將字符串中的首字母大寫(xiě),其余字母均為小寫(xiě)print(s.title())#將字符串中所有單詞的首字母大寫(xiě),其余字母均為小寫(xiě)print(s.swapcase())#將字符串中所有大寫(xiě)字母轉(zhuǎn)為小寫(xiě)字母,所有小寫(xiě)字母轉(zhuǎn)為大寫(xiě)字母42運(yùn)行結(jié)果如下所示:5.1.5字符串常用方法天生我材必有用:allthingsintheirbeingaregoodforsomething.天生我材必有用:ALLTHINGSINTHEIRBEINGAREGOODFORSOMETHING.天生我材必有用:allthingsintheirbeingaregoodforsomething.天生我材必有用:AllThingsInTheirBeingAreGoodForSomething.天生我材必有用:aLLTHINGSINTHEIRBEINGAREGOODFORSOMETHING.432.字符串格式輸出字符串格式輸出常用方法如下表所示:5.1.5字符串常用方法44【例5.5】編寫(xiě)程序,對(duì)字符串"反詐騙電話:96110"進(jìn)行字符串格式輸出。5.1.5字符串常用方法s1="反詐騙電話:96110"print(s1.center(15,"*"))#居中輸出,指定“*”進(jìn)行填充print(s1.ljust(15,"*"))#居左輸出,指定“*”進(jìn)行填充print(s1.rjust(15,"*"))#居右輸出,指定“*”進(jìn)行填充print(s1.zfill(15))#用“0”進(jìn)行填充45運(yùn)行結(jié)果如下所示:5.1.5字符串常用方法**反詐騙電話:96110**反詐騙電話:96110********反詐騙電話:961100000反詐騙電話:96110463.字符串搜索、定位和替換字符串搜索、定位和替換常用方法如下表所示:5.1.5字符串常用方法47字符串搜索、定位和替換常用方法(續(xù)表)如下所示::5.1.5字符串常用方法48【例5.6】編寫(xiě)程序,對(duì)字符串"青年興則國(guó)家興,青年強(qiáng)則國(guó)家強(qiáng)。"進(jìn)行字符串搜索、定位和替換。5.1.5字符串常用方法s2="青年興則國(guó)家興,青年強(qiáng)則國(guó)家強(qiáng)。"#字符串前后各有2個(gè)空格print(s2.count("青年"))#返回"青年”在字符串中出現(xiàn)的次數(shù)print(s2.find("青年"))#返回“青年”在字符串中首次出現(xiàn)的索引號(hào)print(s2.rfind("青年"))#從右檢測(cè)返回“青年”在字符串中首次出現(xiàn)的索引號(hào)print(s2.replace("青年","少年"))#把字符串中的“青年”替換為“少年”print(s2.lstrip())#截掉字符串左邊的空格print(s2.rstrip())#截掉字符串右邊的空格print(s2.strip())#截掉字符串左右兩邊的空格49運(yùn)行結(jié)果如下所示:5.1.5字符串常用方法2210

少年興則國(guó)家興,少年強(qiáng)則國(guó)家強(qiáng)。

青年興則國(guó)家興,青年強(qiáng)則國(guó)家強(qiáng)。

青年興則國(guó)家興,青年強(qiáng)則國(guó)家強(qiáng)。青年興則國(guó)家興,青年強(qiáng)則國(guó)家強(qiáng)。504.字符串聯(lián)合和分隔字符串聯(lián)合和分隔常用方法如下表所示:5.1.5字符串常用方法51【例5.7】編寫(xiě)程序,進(jìn)行字符串聯(lián)合和分隔。5.1.5字符串常用方法s3=["玉不琢","不成器","人不學(xué)","不知義"]print("*".join(s3))#用“*”進(jìn)行列表中多個(gè)字符串的連接s4="玉不琢-不成器-人不學(xué)-不知義"#從左向右,用“-”進(jìn)行字符串的分隔,返回3個(gè)元素的元組print(s4.partition("-"))#從右向左,用“-”進(jìn)行字符串的分隔,返回3個(gè)元素的元組print(s4.rpartition("-"))

525.1.5字符串常用方法s4="玉不琢-不成器-人不學(xué)-不知義"#從左向右,用“-”進(jìn)行字符串的分隔,分隔兩次,返回列表print(s4.split("-",2))#從右向左,用“-”進(jìn)行字符串的分隔,分給1次,返回列表print(s4.rsplit("-",1))53運(yùn)行結(jié)果如下所示:5.1.5字符串常用方法玉不琢*不成器*人不學(xué)*不知義('玉不琢','-','不成器-人不學(xué)-不知義')('玉不琢-不成器-人不學(xué)','-','不知義')['玉不琢','不成器','人不學(xué)-不知義']['玉不琢-不成器-人不學(xué)','不知義']545.字符串條件判斷字符串條件判斷常用方法如下表所示:5.1.5字符串常用方法55字符串條件判斷常用方法(續(xù)表)如下所示:5.1.5字符串常用方法56【例5.8】編寫(xiě)程序,進(jìn)行字符串條件判斷。5.1.5字符串常用方法>>>"2008年北京奧運(yùn)會(huì)".startswith("2008"),"2008年北京奧運(yùn)會(huì)".endswith("2008")(True,False)>>>"2008BeijingSummerOlympics".isalnum(),"2008".isalpha(),"2008".isdigit()(False,False,True)>>>"2008".isidentifier(),"_2008".isidentifier()(False,True)

575.1.5字符串常用方法>>>"BeijingSummerOlympics".islower(),"BeijingSummerOlympics".isupper()(False,False)>>>"BeijingSummerOlympics".istitle(),"BeijingSummerOlympics".isspace()(True,False)58正則表達(dá)式(RegularExpression,Regex)是一種強(qiáng)大的文本處理工具,它使用單個(gè)字符串來(lái)描述和匹配一系列符合某個(gè)特定語(yǔ)法規(guī)則的字符串。它通常被廣泛應(yīng)用于字符串搜索、替換以及復(fù)雜的數(shù)據(jù)驗(yàn)證等場(chǎng)景。5.2正則表達(dá)式595.2正則表達(dá)式5.2.1正則表達(dá)式概述

5.2.2

正則表達(dá)式元字符

5.2.3正則表達(dá)式模塊

5.2.4

匹配選項(xiàng)編譯標(biāo)志

60正則表達(dá)式是一個(gè)特殊的字符序列,它以靈活、簡(jiǎn)單的方法進(jìn)行文本搜索和匹配、數(shù)據(jù)驗(yàn)證、數(shù)據(jù)提取、文本處理、語(yǔ)法分析和編譯以及字符串操作,具體作用描述如下。(1)文本搜索和匹配:可以用來(lái)搜索、匹配和替換特定模式的文本,例如查找所有符合特定格式的郵箱地址、電話號(hào)碼等。?(2)數(shù)據(jù)驗(yàn)證:可以用來(lái)驗(yàn)證用戶輸入是否符合特定的格式要求,例如驗(yàn)證電子郵件地址、密碼復(fù)雜度等。?(3)數(shù)據(jù)提?。嚎梢詮膹?fù)雜的文本中提取出需要的信息,例如從網(wǎng)頁(yè)源碼中抽取出所有鏈接地址。?(4)文本處理:可以用來(lái)進(jìn)行文本的分割、替換、刪除等操作,例如刪除所有的空格或者特定標(biāo)記。5.2.1正則表達(dá)式概述61(5)語(yǔ)法分析和編譯:在編譯器和解釋器中,正則表達(dá)式可以用來(lái)識(shí)別和處理語(yǔ)法結(jié)構(gòu),例如在編程語(yǔ)言中的語(yǔ)法分析階段,識(shí)別關(guān)鍵字、變量名等。?(6)字符串操作:可以用來(lái)處理和操作字符串,進(jìn)行復(fù)雜的模式匹配和處理,例如對(duì)文本進(jìn)行格式化、規(guī)范化等操作。字符串操作常用的功能有:1)字符串提?。和ㄟ^(guò)正則表達(dá)式來(lái)提取字符串中符合要求的文本。2)字符串匹配:查看字符串是否符合正則表達(dá)式的語(yǔ)法,一般返回True或False。3)字符串替換:查找字符串中符合正則表達(dá)式的文本,并且用指定的字符串進(jìn)行替換。4)字符串分隔:使用正則表達(dá)式對(duì)字符串進(jìn)行分隔。5.2.1正則表達(dá)式概述62在Python中,使用正則表達(dá)式時(shí),需要先導(dǎo)入re模塊,re模塊提供了正則表達(dá)式操作所需要的功能。正則表達(dá)式通過(guò)普通字符和特殊字符(又稱為元字符)構(gòu)成一個(gè)規(guī)則(模式),使用這個(gè)規(guī)則對(duì)字符串進(jìn)行過(guò)濾,從而得到想要的結(jié)果。5.2.2正則表達(dá)式元字符631.字符類元字符常用的字符類元字符如下表所示:5.2.2正則表達(dá)式元字符64【例5.9】編寫(xiě)程序,列舉常用的字符類元字符。5.2.2正則表達(dá)式元字符>>>importre>>>s="中國(guó):China瓷器:china中國(guó)人:chinese唐人街:chinatown">>>re.findall(r"china",s)#匹配所有的china['china','china']>>>re.findall(r"[china]",s)#匹配c、h、i、n、a中的一個(gè)字符['h','i','n','a','c','h','i','n','a','c','h','i','n','c','h','i','n','a','n']>>>re.findall(r"[A-Za-z]hina",s)#匹配大寫(xiě)字母或小寫(xiě)字母后面跟hina['China','china','china']

655.2.2正則表達(dá)式元字符>>>importre>>>s="中國(guó):China瓷器:china中國(guó)人:chinese唐人街:chinatown">>>re.findall(r"ch[in]a",s)#匹配chia或者chna[]>>>re.findall(r"chin[^a]",s)#匹配chin后面不跟a['chine']>>>re.findall(r"[[\u4e00-\u9fa5]",s)#匹配任意一個(gè)中文字符['中','國(guó)','瓷','器','中','國(guó)','人','唐','人','街']662.預(yù)定義字符類元字符常用的預(yù)定義字符類元字符如下表所示:5.2.2正則表達(dá)式元字符67【例5.10】編寫(xiě)程序,列舉常用的預(yù)定義字符類元字符。5.2.2正則表達(dá)式元字符>>>importre>>>s="中國(guó):China瓷器:china中國(guó)人:chinese唐人街:chinatown">>>re.findall(r"chin.",s)#匹配chin后跟一個(gè)除換行符外的任意字符['china','chine','china']>>>re.findall(r".hin.",s)#匹配hin前后各跟一個(gè)除換行符外的任意字符['China','china','chine','china']685.2.2正則表達(dá)式元字符>>>importre>>>s1="華羅庚(1910.11.12-1985.6.12)是世界著名的數(shù)論家和組合學(xué)家。">>>re.findall(r"\d\d\d\d",s1)#匹配4位的任意數(shù)字['1910','1985']>>>s2="1_one2_two3_three4_four"#匹配一個(gè)數(shù)字后跟一個(gè)非空白字符,再跟一個(gè)字母或數(shù)字或下畫(huà)線>>>re.findall(r"\d\S\w",s2)['1_o','2_t','3_t','4_f']693.邊界匹配符類元字符常用的邊界匹配符類元字符如下表所示:5.2.2正則表達(dá)式元字符70【例5.11】編寫(xiě)程序,列舉常用的邊界匹配符類元字符。5.2.2正則表達(dá)式元字符>>>importre>>>s="Cat,cat,catchthatfatrat.">>>re.findall(r"cat",s)#匹配所有的cat['cat','cat']>>>re.findall(r"^cat",s)#匹配以cat開(kāi)頭的字符串[]>>>re.findall(r"at$",s)#匹配以at結(jié)尾的字符串[]715.2.2正則表達(dá)式元字符>>>importre>>>s="Cat,cat,catchthatfatrat.">>>re.findall(r"\bcat",s)#匹配頭部有邊界的cat['cat','cat']>>>re.findall(r"\Bat\B",s)#匹配頭部和尾部都不是邊界的at['at']724.重復(fù)限定符類元字符常用的重復(fù)限定符類元字符如下表所示:5.2.2正則表達(dá)式元字符73【例5.12】編寫(xiě)程序,列舉常用的重復(fù)限定符類元字符。5.2.2正則表達(dá)式元字符>>>importre>>>s="1101110211211221112">>>re.findall(r"111*",s)#匹配*前面的字符1,0次或多次['11','11','11','111']>>>re.findall(r"112+",s)#匹配+前面的字符2,1次或多次['112','1122','112']>>>re.findall(r"11{2}",s)#匹配{}前面的字符1,2次['111']745.2.2正則表達(dá)式元字符>>>importre>>>s="1101110211211221112">>>re.findall(r"12{2,}",s)#匹配{}前面的字符2,2次或多次['122']>>>re.findall(r"102|112",s)#匹配102或者112['102','112','112','112']>>>re.findall(r"(112)+",s)#匹配112,1次或多次['112','112','112']75Python中,re模塊提供了眾多可以實(shí)現(xiàn)正則表達(dá)式操作所需要的方法,這些方法名稱可以通過(guò)內(nèi)置函數(shù)dir()進(jìn)行查看。5.2.3正則表達(dá)式模塊>>>importre>>>dir(re)['A','ASCII','DEBUG','DOTALL','I','IGNORECASE','L','LOCALE','M','MULTILINE','Match','Pattern','RegexFlag','S','Scanner','T','TEMPLATE','U','UNICODE','VERBOSE','X','_MAXCACHE','__all__','__builtins__','__cached__','__doc__','__file__','__loader__','__name__','__package__','__spec__','__version__','_cache','_compile',765.2.3正則表達(dá)式模塊'_compile_repl','_expand','_locale','_pickle','_special_chars_map','_subx','compile','copyreg','enum','error','escape','findall','finditer','fullmatch','functools','match','purge','search','split','sre_compile','sre_parse','sub','subn','template']77re模塊的常用方法如下表所示:5.2.3正則表達(dá)式模塊781.split()方法split()方法用指定的分隔符對(duì)字符串進(jìn)行分隔操作,并返回分隔后的字符串列表。該方法的基本語(yǔ)法格式如下所示:5.2.3正則表達(dá)式模塊re.split(pattern,string[,flags])其中,參數(shù)pattern表示正則表達(dá)式字符串;string表示已知字符串或字符串對(duì)象;flags表示匹配標(biāo)志,用于控制正則表達(dá)式的匹配方式,如是否區(qū)分大小寫(xiě)、多行匹配等。795.2.3正則表達(dá)式模塊>>>importre>>>s="鼠、牛、虎、兔、龍、蛇、馬、羊、猴、雞、狗、豬">>>re.split("、",s)#以“、”為分隔符進(jìn)行分隔['鼠','牛','虎','兔','龍','蛇','馬','羊','猴','雞','狗','豬']>>>re.split("龍",s)#以“龍”為分隔符進(jìn)行分隔['鼠、牛、虎、兔、','、蛇、馬、羊、猴、雞、狗、豬']示例代碼如下所示:802.findall()方法findall()方法用某個(gè)正則表達(dá)式模式對(duì)字符串進(jìn)行匹配,按找到的順序返回一個(gè)匹配列表。如果沒(méi)有找到匹配的,則返回空列表。該方法的基本語(yǔ)法格式如下所示:5.2.3正則表達(dá)式模塊re.findall(pattern,string[,flags])其中,參數(shù)pattern表示正則表達(dá)式字符串;string表示已知字符串或字符串對(duì)象;flags表示匹配標(biāo)志,用于控制正則表達(dá)式的匹配方式,如是否區(qū)分大小寫(xiě)、多行匹配等。815.2.3正則表達(dá)式模塊>>>importre>>>s="一分耕耘,一分收獲(Nopains,nogains.)">>>re.findall(r"ai\w",s)#匹配ai后面跟一個(gè)字母或一個(gè)數(shù)字或一個(gè)下畫(huà)線['ain','ain']>>>pattern="[A-Z]\w">>>re.findall(pattern,s)#匹配大寫(xiě)字母后面跟一個(gè)字母或一個(gè)數(shù)字或一個(gè)下畫(huà)線['No']示例代碼如下所示:823.sub()方法sub()方法用給定的字符串替換原字符串中的匹配項(xiàng)。如果沒(méi)有找到原字符串中的匹配項(xiàng),則保留原字符串元素不變。該方法的基本語(yǔ)法格式如下所示:5.2.3正則表達(dá)式模塊re.sub(pattern,repl,string,count=0[,flags])其中,參數(shù)pattern表示正則表達(dá)式字符串;repl表示給定的字符串,也可以是一個(gè)函數(shù);string表示已知字符串或字符串對(duì)象;count表示匹配后替換的最大次數(shù),如果省略,則表示替換所有被匹配到的字符;flags表示匹配標(biāo)志,可以省略。835.2.3正則表達(dá)式模塊>>>importre>>>s="您好!我的賬戶密碼是:12345。">>>re.sub(r"[0-9]","*",s)#將匹配到的每一個(gè)數(shù)字用*替換'您好!我的賬戶密碼是:*****。'>>>re.sub(r"[0-9]+","*",s)#將匹配到的多個(gè)數(shù)字用一個(gè)*替換'您好!我的賬戶密碼是:*。'示例代碼如下所示:844.escape()方法escape()方法對(duì)字符串中可能被解釋為正則表達(dá)式的特殊字符進(jìn)行轉(zhuǎn)義。該方法的基本語(yǔ)法格式如下所示:5.2.3正則表達(dá)式模塊re.escape(pattern)其中,參數(shù)pattern表示含有特殊字符的字符串。>>>importre>>>s="中國(guó)政府網(wǎng)的網(wǎng)址為:/"#字符串中的.容易被理解為正則表達(dá)式中的元字符

>>>re.escape(s)#對(duì)字符串中.進(jìn)行轉(zhuǎn)義'中國(guó)政府網(wǎng)的網(wǎng)址為:https://www\\.gov\\.cn/'855.search()方法search()方法利用正則表達(dá)式模式對(duì)給定的字符串進(jìn)行匹配。如果匹配成功,則返回第一個(gè)匹配對(duì)象,否則返回None。該方法的基本語(yǔ)法格式如下所示:5.2.3正則表達(dá)式模塊re.search(pattern,string[,flags])其中,參數(shù)pattern表示正則表達(dá)式字符串;string表示已知字符串或字符串對(duì)象;flags表示匹配標(biāo)志,用于控制正則表達(dá)式的匹配方式,如是否區(qū)分大小寫(xiě)、多行匹配等。865.2.3正則表達(dá)式模塊>>>importre>>>s="青年一代有理想、有本領(lǐng)、有擔(dān)當(dāng),國(guó)家就有前途,民族就有希望。">>>re.search("青年",s)#在字符串s中對(duì)“青年”一詞匹配,返回首次匹配成功的對(duì)象<re.Matchobject;span=(0,2),match='青年'>>>>re.search("希望",s)#在字符串s中對(duì)“希望”一詞匹配,返回首次匹配成功的對(duì)象<re.Matchobject;span=(27,29),match='希望'>示例代碼如下所示:876.match()方法match()方法從字符串的開(kāi)始位置進(jìn)行正則表達(dá)式模式匹配,如果匹配成功,則返回一個(gè)匹配對(duì)象,否則返回None。該方法的基本語(yǔ)法格式如下所示:5.2.

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論