版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 深圳股權(quán)轉(zhuǎn)讓合同(2025年版)4篇
- 商場(chǎng)LED顯示屏租賃合同(二零二五年)
- 二零二五年度國(guó)際法學(xué)與留學(xué)項(xiàng)目合同3篇
- 2025年度個(gè)人一手房買(mǎi)賣(mài)合同環(huán)保標(biāo)準(zhǔn)范本4篇
- 2025版戶(hù)外休閑場(chǎng)所草皮采購(gòu)與租賃合同3篇
- 2025年智能家居系統(tǒng)產(chǎn)品銷(xiāo)售激勵(lì)協(xié)議書(shū)2篇
- 2025版團(tuán)購(gòu)樓房指標(biāo)轉(zhuǎn)讓與房地產(chǎn)咨詢(xún)代理合同3篇
- 2025版智能防蚊紗窗研發(fā)與銷(xiāo)售合作協(xié)議3篇
- 2025年度個(gè)人投資分紅收據(jù)模板制作服務(wù)協(xié)議4篇
- 2025年度互聯(lián)網(wǎng)金融服務(wù)提供商合作協(xié)議范本4篇
- 鄉(xiāng)村治理中正式制度與非正式制度的關(guān)系解析
- 2024版義務(wù)教育小學(xué)數(shù)學(xué)課程標(biāo)準(zhǔn)
- 智能護(hù)理:人工智能助力的醫(yī)療創(chuàng)新
- 國(guó)家中小學(xué)智慧教育平臺(tái)培訓(xùn)專(zhuān)題講座
- 5G+教育5G技術(shù)在智慧校園教育專(zhuān)網(wǎng)系統(tǒng)的應(yīng)用
- VI設(shè)計(jì)輔助圖形設(shè)計(jì)
- 淺談小學(xué)勞動(dòng)教育的開(kāi)展與探究 論文
- 2023年全國(guó)4月高等教育自學(xué)考試管理學(xué)原理00054試題及答案新編
- 河北省大學(xué)生調(diào)研河北社會(huì)調(diào)查活動(dòng)項(xiàng)目申請(qǐng)書(shū)
- JJG 921-2021環(huán)境振動(dòng)分析儀
- 兩段焙燒除砷技術(shù)簡(jiǎn)介 - 文字版(1)(2)課件
評(píng)論
0/150
提交評(píng)論