Python程序設(shè)計(jì)基礎(chǔ)-教學(xué)課件 第9章 正則表達(dá)式_第1頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)-教學(xué)課件 第9章 正則表達(dá)式_第2頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)-教學(xué)課件 第9章 正則表達(dá)式_第3頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)-教學(xué)課件 第9章 正則表達(dá)式_第4頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)-教學(xué)課件 第9章 正則表達(dá)式_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第9章

正則表達(dá)式目錄9.1正則表達(dá)式概述9.2基本規(guī)則9.49.3正則表達(dá)式的組正則表達(dá)式的函數(shù)9.1正則表達(dá)式概述

正則表達(dá)式(RegularExpression)是一種字符模式的描述方法,用于匹配、搜索和替換字符串。它是由各種字符和特殊字符組成的字符串,通過(guò)特定的語(yǔ)法規(guī)則定義匹配模式。正則表達(dá)式的應(yīng)用場(chǎng)景廣泛。1324可以用正則表達(dá)式查找特定模式的文本,如匹配特定單詞、日期、郵件地址等??梢杂谜齽t表達(dá)式驗(yàn)證輸入數(shù)據(jù)是否符合特定的格式要求,如驗(yàn)證郵箱、手機(jī)號(hào)碼等。正則表達(dá)式在編程中得到廣泛應(yīng)用,用于字符串操作、模式匹配、提取信息等??梢杂谜齽t表達(dá)式將匹配的模式替換為新內(nèi)容,如替換掉所有的空格、轉(zhuǎn)換日期格式等。編程語(yǔ)言中的文本處理數(shù)據(jù)校驗(yàn)和驗(yàn)證文本替換和轉(zhuǎn)換文本搜索和匹配9.2.1

正則表達(dá)式中的字符串類(lèi)型正則表達(dá)式中的字符串類(lèi)型指的是正則表達(dá)式中用來(lái)匹配的具體字符組合。這些字符可以包括字母、數(shù)字、特殊字符以及轉(zhuǎn)義字符等。在正則表達(dá)式中,可以使用字符類(lèi)別來(lái)表示特定類(lèi)型的字符。此外,正則表達(dá)式還支持使用轉(zhuǎn)義字符來(lái)表示特殊字符。通過(guò)組合不同類(lèi)型的字符和使用量詞來(lái)控制匹配次數(shù),可以構(gòu)建出復(fù)雜且靈活的正則表達(dá)式,用于匹配各種字符串模式。9.2.2模式字符串中的普通字符模式字符串中的普通字符,是指除了一些具有特殊意義的字符之外的常規(guī)字符。在正則表達(dá)式中,普通字符直接表示它們自身,用于與目標(biāo)字符串進(jìn)行精確匹配。例如,在模式字符串中包含字母"a",那么正則表達(dá)式將會(huì)匹配目標(biāo)字符串中的所有"a"字符。同樣地,如果在模式字符串中包含數(shù)字"5",那么正則表達(dá)式將會(huì)匹配目標(biāo)字符串中的所有"5"字符。在某些情況下,模式字符串中的某些特殊字符也可能被視為普通字符。通常情況下,這些特殊字符會(huì)通過(guò)在它們前面加上反斜杠(\)來(lái)轉(zhuǎn)義,以表示它們自身而不是特殊含義。例如,如果想匹配目標(biāo)字符串中的一個(gè)句點(diǎn)字符(.),可以在模式字符串中使用\.。模式字符串中的普通字符直接匹配目標(biāo)字符串中對(duì)應(yīng)的字符,不涉及任何特殊的規(guī)則或符號(hào)解釋。9.2.3模式字符串中的轉(zhuǎn)義字符

模式字符串中的轉(zhuǎn)義字符是用來(lái)表示具有特殊意義的字符的特殊字符序列。轉(zhuǎn)義字符通常由一個(gè)反斜杠(\)緊跟著要轉(zhuǎn)義的字符組成。通過(guò)使用轉(zhuǎn)義字符,可以匹配那些在正則表達(dá)式中有特殊意義的字符,例如正則表達(dá)式中的元字符(如.、^、$、*、+、?、{、}、[、]、|、(、)等)以及一些其他特殊字符(如換行符\n、制表符\t等)。例如,如果想匹配目標(biāo)字符串中的一個(gè)點(diǎn)字符(.),需要在模式字符串中使用轉(zhuǎn)義字符,即使用\.。同樣地,如果要匹配一個(gè)制表符字符(\t),需要使用\t。如果想匹配反斜杠字符自身,需要使用兩個(gè)連續(xù)的反斜杠(\\),因?yàn)榉葱备茉谡齽t表達(dá)式中也是一個(gè)轉(zhuǎn)義字符。轉(zhuǎn)義字符在正則表達(dá)式中用于轉(zhuǎn)義具有特殊意義的字符,使得它們能夠被正確匹配。通過(guò)使用轉(zhuǎn)義字符,可以精確地匹配模式中的特殊字符,而不會(huì)與其它正則表達(dá)式語(yǔ)法沖突。9.2.4模式字符串中的特殊字符

模式字符串中的特殊字符是在正則表達(dá)式中具有特殊含義或功能的字符。這些特殊字符用于定義匹配模式,控制匹配方式和匹配數(shù)量。元字符描述.匹配除了換行符以外的任意字符^匹配字符串的開(kāi)頭$匹配字符串的結(jié)尾\b匹配單詞邊界\B匹配非單詞邊界[]定義字符類(lèi)別,匹配括號(hào)內(nèi)的任意字符|表示邏輯或,匹配兩個(gè)模式中的任意一個(gè)表9-1元字符量詞描述*匹配前面的元素零次或多次+匹配前面的元素一次或多次?匹配前面的元素零次或一次{n}匹配前面的元素恰好

n次{n,}匹配前面的元素至少

n次{n,m}匹配前面的元素至少

n次且不超過(guò)m次表9-2量詞轉(zhuǎn)義字符描述\用于轉(zhuǎn)義特殊字符表9-3轉(zhuǎn)義字符9.3.1捕獲組

正則表達(dá)式中的捕獲組是指用括號(hào)括起來(lái)的子表達(dá)式,用于提取和操作匹配到的子字符串。當(dāng)正則表達(dá)式匹配成功時(shí),捕獲組將會(huì)保存匹配到的子字符串??梢允褂锰厥獾恼Z(yǔ)法來(lái)引用捕獲組中的內(nèi)容,例如通過(guò)使用編號(hào)(1、2、3...)或者命名來(lái)引用捕獲組。這樣,就可以在正則表達(dá)式中針對(duì)捕獲組中的內(nèi)容進(jìn)行后續(xù)操作,如替換、提取、條件匹配等。例如,假設(shè)有一個(gè)正則表達(dá)式模式為(ab)+,目標(biāo)字符串為"ababab"。使用該正則表達(dá)式可匹配到三個(gè)連續(xù)的"ab"子串。如果將子表達(dá)式(ab)使用括號(hào)括起來(lái),那么這個(gè)括號(hào)內(nèi)的子表達(dá)式就構(gòu)成了一個(gè)捕獲組。通過(guò)捕獲組,可以獲取到每個(gè)匹配到的子串,例如編號(hào)為1的捕獲組將會(huì)依次保存"ab"、"ab"、"ab"。捕獲組在處理正則表達(dá)式時(shí)非常有用,可以在匹配過(guò)程中捕獲需要的子字符串,然后用于后續(xù)的字符串操作和處理。9.3.1捕獲組假設(shè)有一個(gè)目標(biāo)字符串為"JohnDoe",想從中提取出名字和姓氏??梢允褂谜齽t表達(dá)式(\w+)\s(\w+)來(lái)捕獲名字和姓氏。(\w+)是第一個(gè)捕獲組,匹配一個(gè)或多個(gè)連續(xù)的單詞字符(字母、數(shù)字、下劃線)。它會(huì)捕獲名字部分。01(\w+)是第二個(gè)捕獲組,同樣匹配一個(gè)或多個(gè)連續(xù)的單詞字符。它會(huì)捕獲姓氏部分。0203\s匹配一個(gè)空白字符(包括空格、制表符、換行符等)。使用捕獲組,可以提取到匹配結(jié)果中的姓名部分。通過(guò)對(duì)捕獲組的引用,可以進(jìn)一步操作和處理這些提取到的子字符串。例如,可以使用編程語(yǔ)言中的正則表達(dá)式相關(guān)函數(shù),通過(guò)引用捕獲組的內(nèi)容將名字和姓氏提取出來(lái),然后進(jìn)行相應(yīng)的處理和輸出。9.3.2條件匹配

在正則表達(dá)式中,條件匹配允許根據(jù)某些條件來(lái)選擇性地匹配模式。條件匹配可以根據(jù)一個(gè)條件表達(dá)式的結(jié)果來(lái)決定是否進(jìn)行匹配。這可以用于處理不同的情況或模式選擇。條件匹配可以使用以下語(yǔ)法來(lái)表示:(?(condition)true-pattern|false-patterrn)其中,condition

是一個(gè)條件表達(dá)式,可以是一個(gè)正則表達(dá)式模式或其他布爾表達(dá)式。true-pattern

是滿(mǎn)足條件時(shí)要匹配的模式,false-pattern

是條件不滿(mǎn)足時(shí)要匹配的模式。假設(shè)要匹配一個(gè)字符串,它的開(kāi)頭是數(shù)字,然后是字母,并且如果字母是小寫(xiě)字母,則后面必須跟一個(gè)大寫(xiě)字母,否則后面不能有大寫(xiě)字母。正則表達(dá)式模式可以寫(xiě)為:^\d+[a-z](?(?=[a-z])[A-Z]|[^A-Z])^\d+匹配一個(gè)或多個(gè)數(shù)字字符作為開(kāi)頭。[a-z]匹配一個(gè)小寫(xiě)字母。(?([a-z])[A-Z]|[^A-Z])是條件匹配部分,如果結(jié)果為真,則匹配[A-Z],即一個(gè)大寫(xiě)字母。如果結(jié)果為假,則匹配[^A-Z],即除大寫(xiě)字母外的任意字符。9.3.3斷言組在正則表達(dá)式中,斷言組是一種特殊的構(gòu)造,用于在匹配過(guò)程中進(jìn)行先行或后行的條件判斷,而不消耗實(shí)際的匹配字符。斷言組分為兩種類(lèi)型:先行斷言和后行斷言。12使用(?=...)語(yǔ)法表示。它會(huì)匹配滿(mǎn)足括號(hào)內(nèi)條件的位置,在匹配成功后,繼續(xù)向前匹配實(shí)際字符。使用(?<=...)語(yǔ)法表示。它會(huì)匹配滿(mǎn)足括號(hào)內(nèi)條件的位置,在匹配成功后,向后匹配實(shí)際字符。后行斷言先行斷言

斷言組允許在匹配過(guò)程中添加額外的邏輯條件,以便更精確地指定要匹配的位置。它們?cè)谔幚韽?fù)雜的匹配需求時(shí)非常有用。9.4.1正則對(duì)象和匹配規(guī)則在Python中,可以使用內(nèi)置的re模塊來(lái)創(chuàng)建和使用正則對(duì)象。re模塊提供了一系列函數(shù),用于處理正則表達(dá)式的編譯、匹配和替換等操作。使用正則對(duì)象的基本步驟如下:1)導(dǎo)入re模塊在使用正則表達(dá)式之前,需要先導(dǎo)入Python的re模塊。該模塊提供了正則表達(dá)式的相關(guān)功能,語(yǔ)法格式為:importre2)編譯正則表達(dá)式使用re模塊的compile()函數(shù)來(lái)編譯正則表達(dá)式字符串,返回一個(gè)正則對(duì)象。其中,r'正則表達(dá)式'是一個(gè)原始字符串表示的正則表達(dá)式。pattern=pile(r‘正則表達(dá)式’)3)使用正則對(duì)象進(jìn)行匹配操作通過(guò)調(diào)用正則對(duì)象的方法,如match()、search()、findall()等,可以在目標(biāo)字符串中進(jìn)行匹配操作。這些方法會(huì)返回匹配結(jié)果。result=patteren.match(‘目標(biāo)字符串’)如果匹配成功,可以使用Match對(duì)象的group()方法來(lái)獲取匹配的字符串。4)處理匹配結(jié)果也可以直接使用

re

模塊的函數(shù)來(lái)進(jìn)行正則操作,而不必顯式地編譯正則對(duì)象。但若需要多次使用相同的正則表達(dá)式進(jìn)行匹配,編譯正則對(duì)象可以提高效率。正則表達(dá)式的匹配規(guī)則可以通過(guò)在正則表達(dá)式字符串中使用特定的語(yǔ)法和元字符來(lái)指定。以下是一些常用的正則表達(dá)式匹配規(guī)則:9.4.1正則對(duì)象和匹配規(guī)則正則表達(dá)式中的普通字符表示按字面值匹配。普通字符匹配01使用方括號(hào)[...]表示一個(gè)字符類(lèi),用于匹配字符集合中的任意一個(gè)字符。02字符類(lèi)匹配使用反斜杠“\”來(lái)轉(zhuǎn)義元字符或特殊字符,使它們具有普通字符的含義。03轉(zhuǎn)義字符匹配使用特定的量詞元字符(如*、+、?、{m}、{m,n})指定匹配次數(shù)。量詞匹配04使用特殊的元字符“^”和“$”來(lái)指定匹配的整個(gè)字符串的起始和結(jié)束位置。邊界匹配05使用圓括號(hào)(...)來(lái)創(chuàng)建分組,并使用\1、\2等反向引用來(lái)匹配捕獲的分組。分組和捕獲0607預(yù)定義字符類(lèi)使用特定的預(yù)定義字符類(lèi)簡(jiǎn)化常見(jiàn)的匹配需求。(1)match

函數(shù)正則對(duì)象的成員函數(shù)match

是用于從字符串的開(kāi)頭開(kāi)始匹配正則表達(dá)式的方法。它嘗試在目標(biāo)字符串的開(kāi)頭找到與正則表達(dá)式完全匹配的內(nèi)容。match方法的語(yǔ)法如下:

match_obj=pattern.match(string,pos,endpos)9.4.2常用成員函數(shù)

pattern是一個(gè)已編譯的正則表達(dá)式對(duì)象;

string是目標(biāo)字符串,即要進(jìn)行匹配的字符串;

pos(可選)是匹配的起始位置,默認(rèn)為0(開(kāi)頭);

endpos(可選)是匹配的結(jié)束位置,默認(rèn)為字符串的長(zhǎng)度。match方法返回一個(gè)Match對(duì)象,如果找到匹配,則該對(duì)象包含有關(guān)匹配的相關(guān)信息;如果沒(méi)有找到匹配,則返回None。match對(duì)象有幾個(gè)常用的方法,可以從中提取匹配的相關(guān)信息:

group():返回整個(gè)匹配的字符串。

start():返回匹配的起始位置。

end():返回匹配的結(jié)束位置的下一個(gè)位置。

span():返回匹配的起始位置和結(jié)束位置的元組。(2)search

函數(shù)正則對(duì)象的成員函數(shù)search是用于在字符串中搜索匹配正則表達(dá)式的方法。它在目標(biāo)字符串中查找符合正則表達(dá)式的任意位置的匹配。search方法的語(yǔ)法如下:

search_obj=pattern.search(string,pos,endpos)9.4.2常用成員函數(shù)

pattern是一個(gè)已編譯的正則表達(dá)式對(duì)象;

string是目標(biāo)字符串,即要進(jìn)行搜索的字符串;

pos(可選)是搜索的起始位置,默認(rèn)為0(開(kāi)頭);

endpos(可選)是搜索的結(jié)束位置,默認(rèn)為字符串的長(zhǎng)度。search()方法返回一個(gè)Match對(duì)象,如果找到匹配,則該對(duì)象包含有關(guān)匹配的相關(guān)信息;如果沒(méi)有找到匹配,則返回None。(3)fullmatch

函數(shù)正則對(duì)象的成員函數(shù)fullmatch是用于完全匹配正則表達(dá)式的方法。它嘗試在目標(biāo)字符串中找到與正則表達(dá)式完全匹配的內(nèi)容。fullmatch方法的語(yǔ)法如下:

fullmatch_obj=pattern.fullmatch(string)9.4.2常用成員函數(shù)

pattern是一個(gè)已編譯的正則表達(dá)式對(duì)象;

string是目標(biāo)字符串,即要進(jìn)行匹配的字符串。fullmatch方法返回一個(gè)Match對(duì)象,如果找到完全匹配,則該對(duì)象包含有關(guān)匹配的相關(guān)信息;如果沒(méi)有找到完全匹配,則返回None。9.4.2常用成員函數(shù)(4)split

函數(shù)正則對(duì)象的成員函數(shù)split是用于按照正則表達(dá)式匹配的位置將字符串分割為子字符串的方法。split方法的語(yǔ)法如下:

split_list=pattern.split(string,maxplit=0)

pattern是一個(gè)已編譯的正則表達(dá)式對(duì)象;

string是目標(biāo)字符串,即要進(jìn)行分割的字符串;

maxsplit(可選)是分割次數(shù),如果指定為0或負(fù)數(shù),則不限制分割次數(shù)。split()方法返回一個(gè)由分割后的子字符串組成的列表。9.4.2常用成員函數(shù)(5)sub

函數(shù)正則對(duì)象的成員函數(shù)sub是用于在目標(biāo)字符串中替換與正則表達(dá)式匹配的部分。sub方法的語(yǔ)法如下:

new_string=pattern.sub(rep1,string,count=0)

pattern是一個(gè)已編譯的正則表達(dá)式對(duì)象;

repl是用于替換匹配部分的字符串;

string是目標(biāo)字符串,即要進(jìn)行替換的字符串;

count(可選)是替換的最大次數(shù),如果指定為0或負(fù)數(shù),則進(jìn)行所有可能的替換。注意:sub方法中的repl參數(shù)可以是一個(gè)字符串,也可以是一個(gè)替換函數(shù)。如果是字符串,則會(huì)將所有匹配部分替換為該字符串。如果是替換函數(shù),則可以根據(jù)匹配的結(jié)果動(dòng)態(tài)生成替換字符串。9.4.2常用成員函數(shù)(6)findall

函數(shù)正則對(duì)象的成員函數(shù)findall

是用于查找目標(biāo)字符串中所有與正則表達(dá)式匹配的部分,并返回一個(gè)包含所有匹配項(xiàng)的列表。findall方法的語(yǔ)法如下:

matches=pattern.findall(string)

pattern是一個(gè)已編譯的正則表達(dá)式對(duì)象;

string是目標(biāo)字符串,即要進(jìn)行匹配的字符串。findall方法返回一個(gè)列表,其中包含了目標(biāo)字符串中所有與正則表達(dá)式匹配的部分。注意:findall方法只返回匹配項(xiàng)的內(nèi)容,不包括匹配項(xiàng)的位置信息。9.4.2常用成員函數(shù)(7)finditer

函數(shù)正則對(duì)象的成員函數(shù)finditer是用于查找目標(biāo)字符串中所有與正則表達(dá)式匹配的部分,并返回一個(gè)由匹配對(duì)象組成的迭代器。finditer方法的語(yǔ)法如下:

matches=pattern.finditer(string)

pattern是一個(gè)已編譯的正則表達(dá)式對(duì)象;

string是目標(biāo)字符串,即要進(jìn)行匹配的字符串。finditer方法返回一個(gè)迭代器,該迭代器由匹配對(duì)象組成。每個(gè)匹配對(duì)象都包含了匹配項(xiàng)的內(nèi)容以及其位置信息。注意:匹配對(duì)象的方法和屬性與Match對(duì)象

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論