版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第9章
正則表達式目錄9.1正則表達式概述9.2基本規(guī)則9.49.3正則表達式的組正則表達式的函數(shù)9.1正則表達式概述
正則表達式(RegularExpression)是一種字符模式的描述方法,用于匹配、搜索和替換字符串。它是由各種字符和特殊字符組成的字符串,通過特定的語法規(guī)則定義匹配模式。正則表達式的應用場景廣泛。1324可以用正則表達式查找特定模式的文本,如匹配特定單詞、日期、郵件地址等。可以用正則表達式驗證輸入數(shù)據(jù)是否符合特定的格式要求,如驗證郵箱、手機號碼等。正則表達式在編程中得到廣泛應用,用于字符串操作、模式匹配、提取信息等??梢杂谜齽t表達式將匹配的模式替換為新內容,如替換掉所有的空格、轉換日期格式等。編程語言中的文本處理數(shù)據(jù)校驗和驗證文本替換和轉換文本搜索和匹配9.2.1
正則表達式中的字符串類型正則表達式中的字符串類型指的是正則表達式中用來匹配的具體字符組合。這些字符可以包括字母、數(shù)字、特殊字符以及轉義字符等。在正則表達式中,可以使用字符類別來表示特定類型的字符。此外,正則表達式還支持使用轉義字符來表示特殊字符。通過組合不同類型的字符和使用量詞來控制匹配次數(shù),可以構建出復雜且靈活的正則表達式,用于匹配各種字符串模式。9.2.2模式字符串中的普通字符模式字符串中的普通字符,是指除了一些具有特殊意義的字符之外的常規(guī)字符。在正則表達式中,普通字符直接表示它們自身,用于與目標字符串進行精確匹配。例如,在模式字符串中包含字母"a",那么正則表達式將會匹配目標字符串中的所有"a"字符。同樣地,如果在模式字符串中包含數(shù)字"5",那么正則表達式將會匹配目標字符串中的所有"5"字符。在某些情況下,模式字符串中的某些特殊字符也可能被視為普通字符。通常情況下,這些特殊字符會通過在它們前面加上反斜杠(\)來轉義,以表示它們自身而不是特殊含義。例如,如果想匹配目標字符串中的一個句點字符(.),可以在模式字符串中使用\.。模式字符串中的普通字符直接匹配目標字符串中對應的字符,不涉及任何特殊的規(guī)則或符號解釋。9.2.3模式字符串中的轉義字符
模式字符串中的轉義字符是用來表示具有特殊意義的字符的特殊字符序列。轉義字符通常由一個反斜杠(\)緊跟著要轉義的字符組成。通過使用轉義字符,可以匹配那些在正則表達式中有特殊意義的字符,例如正則表達式中的元字符(如.、^、$、*、+、?、{、}、[、]、|、(、)等)以及一些其他特殊字符(如換行符\n、制表符\t等)。例如,如果想匹配目標字符串中的一個點字符(.),需要在模式字符串中使用轉義字符,即使用\.。同樣地,如果要匹配一個制表符字符(\t),需要使用\t。如果想匹配反斜杠字符自身,需要使用兩個連續(xù)的反斜杠(\\),因為反斜杠在正則表達式中也是一個轉義字符。轉義字符在正則表達式中用于轉義具有特殊意義的字符,使得它們能夠被正確匹配。通過使用轉義字符,可以精確地匹配模式中的特殊字符,而不會與其它正則表達式語法沖突。9.2.4模式字符串中的特殊字符
模式字符串中的特殊字符是在正則表達式中具有特殊含義或功能的字符。這些特殊字符用于定義匹配模式,控制匹配方式和匹配數(shù)量。元字符描述.匹配除了換行符以外的任意字符^匹配字符串的開頭$匹配字符串的結尾\b匹配單詞邊界\B匹配非單詞邊界[]定義字符類別,匹配括號內的任意字符|表示邏輯或,匹配兩個模式中的任意一個表9-1元字符量詞描述*匹配前面的元素零次或多次+匹配前面的元素一次或多次?匹配前面的元素零次或一次{n}匹配前面的元素恰好
n次{n,}匹配前面的元素至少
n次{n,m}匹配前面的元素至少
n次且不超過m次表9-2量詞轉義字符描述\用于轉義特殊字符表9-3轉義字符9.3.1捕獲組
正則表達式中的捕獲組是指用括號括起來的子表達式,用于提取和操作匹配到的子字符串。當正則表達式匹配成功時,捕獲組將會保存匹配到的子字符串??梢允褂锰厥獾恼Z法來引用捕獲組中的內容,例如通過使用編號(1、2、3...)或者命名來引用捕獲組。這樣,就可以在正則表達式中針對捕獲組中的內容進行后續(xù)操作,如替換、提取、條件匹配等。例如,假設有一個正則表達式模式為(ab)+,目標字符串為"ababab"。使用該正則表達式可匹配到三個連續(xù)的"ab"子串。如果將子表達式(ab)使用括號括起來,那么這個括號內的子表達式就構成了一個捕獲組。通過捕獲組,可以獲取到每個匹配到的子串,例如編號為1的捕獲組將會依次保存"ab"、"ab"、"ab"。捕獲組在處理正則表達式時非常有用,可以在匹配過程中捕獲需要的子字符串,然后用于后續(xù)的字符串操作和處理。9.3.1捕獲組假設有一個目標字符串為"JohnDoe",想從中提取出名字和姓氏。可以使用正則表達式(\w+)\s(\w+)來捕獲名字和姓氏。(\w+)是第一個捕獲組,匹配一個或多個連續(xù)的單詞字符(字母、數(shù)字、下劃線)。它會捕獲名字部分。01(\w+)是第二個捕獲組,同樣匹配一個或多個連續(xù)的單詞字符。它會捕獲姓氏部分。0203\s匹配一個空白字符(包括空格、制表符、換行符等)。使用捕獲組,可以提取到匹配結果中的姓名部分。通過對捕獲組的引用,可以進一步操作和處理這些提取到的子字符串。例如,可以使用編程語言中的正則表達式相關函數(shù),通過引用捕獲組的內容將名字和姓氏提取出來,然后進行相應的處理和輸出。9.3.2條件匹配
在正則表達式中,條件匹配允許根據(jù)某些條件來選擇性地匹配模式。條件匹配可以根據(jù)一個條件表達式的結果來決定是否進行匹配。這可以用于處理不同的情況或模式選擇。條件匹配可以使用以下語法來表示:(?(condition)true-pattern|false-patterrn)其中,condition
是一個條件表達式,可以是一個正則表達式模式或其他布爾表達式。true-pattern
是滿足條件時要匹配的模式,false-pattern
是條件不滿足時要匹配的模式。假設要匹配一個字符串,它的開頭是數(shù)字,然后是字母,并且如果字母是小寫字母,則后面必須跟一個大寫字母,否則后面不能有大寫字母。正則表達式模式可以寫為:^\d+[a-z](?(?=[a-z])[A-Z]|[^A-Z])^\d+匹配一個或多個數(shù)字字符作為開頭。[a-z]匹配一個小寫字母。(?([a-z])[A-Z]|[^A-Z])是條件匹配部分,如果結果為真,則匹配[A-Z],即一個大寫字母。如果結果為假,則匹配[^A-Z],即除大寫字母外的任意字符。9.3.3斷言組在正則表達式中,斷言組是一種特殊的構造,用于在匹配過程中進行先行或后行的條件判斷,而不消耗實際的匹配字符。斷言組分為兩種類型:先行斷言和后行斷言。12使用(?=...)語法表示。它會匹配滿足括號內條件的位置,在匹配成功后,繼續(xù)向前匹配實際字符。使用(?<=...)語法表示。它會匹配滿足括號內條件的位置,在匹配成功后,向后匹配實際字符。后行斷言先行斷言
斷言組允許在匹配過程中添加額外的邏輯條件,以便更精確地指定要匹配的位置。它們在處理復雜的匹配需求時非常有用。9.4.1正則對象和匹配規(guī)則在Python中,可以使用內置的re模塊來創(chuàng)建和使用正則對象。re模塊提供了一系列函數(shù),用于處理正則表達式的編譯、匹配和替換等操作。使用正則對象的基本步驟如下:1)導入re模塊在使用正則表達式之前,需要先導入Python的re模塊。該模塊提供了正則表達式的相關功能,語法格式為:importre2)編譯正則表達式使用re模塊的compile()函數(shù)來編譯正則表達式字符串,返回一個正則對象。其中,r'正則表達式'是一個原始字符串表示的正則表達式。pattern=pile(r‘正則表達式’)3)使用正則對象進行匹配操作通過調用正則對象的方法,如match()、search()、findall()等,可以在目標字符串中進行匹配操作。這些方法會返回匹配結果。result=patteren.match(‘目標字符串’)如果匹配成功,可以使用Match對象的group()方法來獲取匹配的字符串。4)處理匹配結果也可以直接使用
re
模塊的函數(shù)來進行正則操作,而不必顯式地編譯正則對象。但若需要多次使用相同的正則表達式進行匹配,編譯正則對象可以提高效率。正則表達式的匹配規(guī)則可以通過在正則表達式字符串中使用特定的語法和元字符來指定。以下是一些常用的正則表達式匹配規(guī)則:9.4.1正則對象和匹配規(guī)則正則表達式中的普通字符表示按字面值匹配。普通字符匹配01使用方括號[...]表示一個字符類,用于匹配字符集合中的任意一個字符。02字符類匹配使用反斜杠“\”來轉義元字符或特殊字符,使它們具有普通字符的含義。03轉義字符匹配使用特定的量詞元字符(如*、+、?、{m}、{m,n})指定匹配次數(shù)。量詞匹配04使用特殊的元字符“^”和“$”來指定匹配的整個字符串的起始和結束位置。邊界匹配05使用圓括號(...)來創(chuàng)建分組,并使用\1、\2等反向引用來匹配捕獲的分組。分組和捕獲0607預定義字符類使用特定的預定義字符類簡化常見的匹配需求。(1)match
函數(shù)正則對象的成員函數(shù)match
是用于從字符串的開頭開始匹配正則表達式的方法。它嘗試在目標字符串的開頭找到與正則表達式完全匹配的內容。match方法的語法如下:
match_obj=pattern.match(string,pos,endpos)9.4.2常用成員函數(shù)
pattern是一個已編譯的正則表達式對象;
string是目標字符串,即要進行匹配的字符串;
pos(可選)是匹配的起始位置,默認為0(開頭);
endpos(可選)是匹配的結束位置,默認為字符串的長度。match方法返回一個Match對象,如果找到匹配,則該對象包含有關匹配的相關信息;如果沒有找到匹配,則返回None。match對象有幾個常用的方法,可以從中提取匹配的相關信息:
group():返回整個匹配的字符串。
start():返回匹配的起始位置。
end():返回匹配的結束位置的下一個位置。
span():返回匹配的起始位置和結束位置的元組。(2)search
函數(shù)正則對象的成員函數(shù)search是用于在字符串中搜索匹配正則表達式的方法。它在目標字符串中查找符合正則表達式的任意位置的匹配。search方法的語法如下:
search_obj=pattern.search(string,pos,endpos)9.4.2常用成員函數(shù)
pattern是一個已編譯的正則表達式對象;
string是目標字符串,即要進行搜索的字符串;
pos(可選)是搜索的起始位置,默認為0(開頭);
endpos(可選)是搜索的結束位置,默認為字符串的長度。search()方法返回一個Match對象,如果找到匹配,則該對象包含有關匹配的相關信息;如果沒有找到匹配,則返回None。(3)fullmatch
函數(shù)正則對象的成員函數(shù)fullmatch是用于完全匹配正則表達式的方法。它嘗試在目標字符串中找到與正則表達式完全匹配的內容。fullmatch方法的語法如下:
fullmatch_obj=pattern.fullmatch(string)9.4.2常用成員函數(shù)
pattern是一個已編譯的正則表達式對象;
string是目標字符串,即要進行匹配的字符串。fullmatch方法返回一個Match對象,如果找到完全匹配,則該對象包含有關匹配的相關信息;如果沒有找到完全匹配,則返回None。9.4.2常用成員函數(shù)(4)split
函數(shù)正則對象的成員函數(shù)split是用于按照正則表達式匹配的位置將字符串分割為子字符串的方法。split方法的語法如下:
split_list=pattern.split(string,maxplit=0)
pattern是一個已編譯的正則表達式對象;
string是目標字符串,即要進行分割的字符串;
maxsplit(可選)是分割次數(shù),如果指定為0或負數(shù),則不限制分割次數(shù)。split()方法返回一個由分割后的子字符串組成的列表。9.4.2常用成員函數(shù)(5)sub
函數(shù)正則對象的成員函數(shù)sub是用于在目標字符串中替換與正則表達式匹配的部分。sub方法的語法如下:
new_string=pattern.sub(rep1,string,count=0)
pattern是一個已編譯的正則表達式對象;
repl是用于替換匹配部分的字符串;
string是目標字符串,即要進行替換的字符串;
count(可選)是替換的最大次數(shù),如果指定為0或負數(shù),則進行所有可能的替換。注意:sub方法中的repl參數(shù)可以是一個字符串,也可以是一個替換函數(shù)。如果是字符串,則會將所有匹配部分替換為該字符串。如果是替換函數(shù),則可以根據(jù)匹配的結果動態(tài)生成替換字符串。9.4.2常用成員函數(shù)(6)findall
函數(shù)正則對象的成員函數(shù)findall
是用于查找目標字符串中所有與正則表達式匹配的部分,并返回一個包含所有匹配項的列表。findall方法的語法如下:
matches=pattern.findall(string)
pattern是一個已編譯的正則表達式對象;
string是目標字符串,即要進行匹配的字符串。findall方法返回一個列表,其中包含了目標字符串中所有與正則表達式匹配的部分。注意:findall方法只返回匹配項的內容,不包括匹配項的位置信息。9.4.2常用成員函數(shù)(7)finditer
函數(shù)正則對象的成員函數(shù)finditer是用于查找目標字符串中所有與正則表達式匹配的部分,并返回一個由匹配對象組成的迭代器。finditer方法的語法如下:
matches=pattern.finditer(string)
pattern是一個已編譯的正則表達式對象;
string是目標字符串,即要進行匹配的字符串。finditer方法返回一個迭代器,該迭代器由匹配對象組成。每個匹配對象都包含了匹配項的內容以及其位置信息。注意:匹配對象的方法和屬性與Match對象
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高考對聯(lián)題(對聯(lián)知識、高考真題及答案、對應練習題)
- 業(yè)務操作-房地產經紀人《業(yè)務操作》押題密卷2
- 房地產交易制度政策-《房地產基本制度與政策》真題匯編1
- 會計辭職報告
- 二零二五版CAD技術員設計修改與勞務合同3篇
- 四川省攀枝花市第三高級中學2024-2025學年高二上學期第三次月考數(shù)學試卷(含答案)
- 云南省昆明市部分學校2024-2025學年七年級上學期期末地理試卷(含答案)
- 煙臺科技學院《公共建筑設計Ⅲ》2023-2024學年第一學期期末試卷
- 二零二五年度綠色環(huán)保型社區(qū)保潔服務專項合同
- 學 校 節(jié) 約 糧 食 主 題 班 會
- 玻璃體腔注藥術
- 中國超大直徑鉆埋鋼管空心樁講義
- 藝術課程標準(2022年版)
- 一年級語文雨點兒-教學課件【希沃白板初階培訓結營大作業(yè)】
- 替格瑞洛藥物作用機制、不良反應機制、與氯吡格雷區(qū)別和合理使用
- GB/T 20920-2007電子水平儀
- 如何提高教師的課程領導力
- 企業(yè)人員組織結構圖
- 日本疾病診斷分組(DPC)定額支付方式課件
- 實習證明模板免費下載【8篇】
- 復旦大學用經濟學智慧解讀中國課件03用大歷史觀看中國社會轉型
評論
0/150
提交評論