上節(jié)我們說到 Python 正則表達(dá)式的基本字符,以及這些字符的用法
成都創(chuàng)新互聯(lián)是一家企業(yè)級(jí)云計(jì)算解決方案提供商,超15年IDC數(shù)據(jù)中心運(yùn)營經(jīng)驗(yàn)。主營GPU顯卡服務(wù)器,站群服務(wù)器,服務(wù)器主機(jī)托管,海外高防服務(wù)器,機(jī)柜大帶寬、租用·托管,動(dòng)態(tài)撥號(hào)VPS,海外云手機(jī),海外云服務(wù)器,海外服務(wù)器租用托管等。
今天,我們繼續(xù)講講 Python 中一些擴(kuò)展標(biāo)記法,以及一些特殊序列
(?...) : 這種擴(kuò)展標(biāo)記法以括號(hào)內(nèi) ? 開頭,其后第一個(gè)字符決定了采用什么樣的語法。
在 ? 后面添加( 'a', 'i', 'L', 'm', 's', 'u', 'x' 中的一個(gè)或多個(gè)),然后加上匹配規(guī)則。
這些字符對(duì)正則表達(dá)式設(shè)置以下標(biāo)記,免去設(shè)置 flag 參數(shù)
注意 : 'a', 'L', 'u' 作為內(nèi)聯(lián)標(biāo)記是相互排斥的,它們不能結(jié)合在一起
括號(hào)分組的非捕獲版本,該分組所匹配的子字符串 不能 在執(zhí)行匹配后被獲取或是在之后的模式中被引用
可以配合 | 和 {m} 使用
為分組再指定一個(gè)組合名
每個(gè)組合名只能用一個(gè)正則表達(dá)式定義,只能定義一次
反向引用一個(gè)命名組合
匹配前面那個(gè)名字叫 name 的命名組中匹配到的字符串
注釋信息,里面的內(nèi)容會(huì)被忽略。
哈哈,是不是沒看懂,沒事,舉個(gè)栗子
看看,是不是一下子就明了了。
哈哈,這個(gè)又看不懂?
思考一下,既然有根據(jù)后面字符斷言的,那么根據(jù)前面字符來斷言,也是很合理的,
如果給定的 id 或 name 存在,將會(huì)嘗試匹配 yes-pattern ,否則就嘗試匹配 no-pattern , no-pattern 可選,也可以被忽略。
是不是有點(diǎn)像 if else 三目運(yùn)算,其中 id 和 name 是分組 id 、和指定的分組名 name
照舊,舉個(gè)栗子吧
看了栗子是不是有點(diǎn)糊涂呢,我們來解析一下這個(gè)正則表達(dá)式
其結(jié)果匹配的就是 username@host.com 和 username@host.com 。
而不會(huì)匹配 user@host.com ' 和 user@host.com
但是上面的第三個(gè)結(jié)果為啥不一樣呢?
因?yàn)?findall 允許返回空匹配的,在有 ? 的情況下,所以它會(huì)分兩種情況去匹配
今天講了一些擴(kuò)展標(biāo)記法,其實(shí)沒那么難,多看看例子,多練習(xí)練習(xí)。
下節(jié)將介紹 re 模塊各函數(shù)的用法,敬請(qǐng)期待......
match()函數(shù)只檢測RE是不是在string的開始位置匹配,
search()會(huì)掃描整個(gè)string查找匹配,
也就是說match()只有在0位置匹配成功的話才有返回,如果不是開始位置匹配成功的話,match()就返回none
例如:
print(re.match(‘super’,
‘superstition’).span())會(huì)返回(0,
5)
而print(re.match(‘super’,
‘insuperable’))則返回None
search()會(huì)掃描整個(gè)字符串并返回第一個(gè)成功的匹配
例如:print(re.search(‘super’,
‘superstition’).span())返回(0,
5)
print(re.search(‘super’,
‘insuperable’).span())返回(2,
7)
正則表達(dá)式是一個(gè)特殊的字符序列,可以幫助您使用模式中保留的專門語法來匹配或查找其他字符串或字符串集。 正則表達(dá)式在UNIX世界中被廣泛使用。
注:很多開發(fā)人員覺得正則表達(dá)式比較難以理解,主要原因是缺少使用或不愿意在這上面花時(shí)間。
re模塊在Python中提供對(duì)Perl類正則表達(dá)式的完全支持。如果在編譯或使用正則表達(dá)式時(shí)發(fā)生錯(cuò)誤,則re模塊會(huì)引發(fā)異常re.error。
在這篇文章中,將介紹兩個(gè)重要的功能,用來處理正則表達(dá)式。 然而,首先是一件小事:有各種各樣的字符,這些字符在正則表達(dá)式中使用時(shí)會(huì)有特殊的意義。 為了在處理正則表達(dá)式時(shí)避免混淆,我們將使用:r'expression'原始字符串。
匹配單個(gè)字符的基本模式
編譯標(biāo)志可以修改正則表達(dá)式的某些方面。標(biāo)志在re模塊中有兩個(gè)名稱:一個(gè)很長的名稱,如IGNORECASE,和一個(gè)簡短的單字母形式,如。
1.match函數(shù)
此函數(shù)嘗試將RE模式與可選標(biāo)志的字符串進(jìn)行匹配。
下面是函數(shù)的語法 :
這里是參數(shù)的描述 :
pattern : 這是要匹配的正則表達(dá)式。
string : 這是字符串,它將被搜索用于匹配字符串開頭的模式。 |
flags : 可以使用按位OR(|)指定不同的標(biāo)志。 這些是修飾符,如下表所列。
re.match函數(shù)在成功時(shí)返回匹配對(duì)象,失敗時(shí)返回None。使用match(num)或groups()函數(shù)匹配對(duì)象來獲取匹配的表達(dá)式。
示例
當(dāng)執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果 :
2.search函數(shù)
此函數(shù)嘗試將RE模式與可選標(biāo)志的字符串進(jìn)行匹配。
下面是這個(gè)函數(shù)的語法 :
這里是參數(shù)的描述 :
pattern : 這是要匹配的正則表達(dá)式。
string : 這是字符串,它將被搜索用于匹配字符串開頭的模式。 |
flags : 可以使用按位OR(|)指定不同的標(biāo)志。 這些是修飾符,如下表所列。
re.search函數(shù)在成功時(shí)返回匹配對(duì)象,否則返回None。使用match對(duì)象的group(num)或groups()函數(shù)來獲取匹配的表達(dá)式。
示例
當(dāng)執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果 :
3.匹配與搜索
Python提供基于正則表達(dá)式的兩種不同的原始操作:match檢查僅匹配字符串的開頭,而search檢查字符串中任何位置的匹配(這是Perl默認(rèn)情況下的匹配)。
示例
當(dāng)執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果 :
4.搜索和替換
使用正則表達(dá)式re模塊中的最重要的之一是sub。
模塊
此方法使用repl替換所有出現(xiàn)在RE模式的字符串,替換所有出現(xiàn),除非提供max。此方法返回修改的字符串。
示例
當(dāng)執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果 :
5.正則表達(dá)式修飾符:選項(xiàng)標(biāo)志
正則表達(dá)式文字可能包含一個(gè)可選修飾符,用于控制匹配的各個(gè)方面。 修飾符被指定為可選標(biāo)志。可以使用異或(|)提供多個(gè)修飾符,如前所示,可以由以下之一表示 :
6.正則表達(dá)模式
除了控制字符(+ ? . * ^ $ ( ) [ ] { } | ),所有字符都與其自身匹配。 可以通過使用反斜杠將其轉(zhuǎn)換為控制字符。
7.正則表達(dá)式示例
字符常量
字符類
特殊字符類
重復(fù)匹配
非貪婪重復(fù)
這匹配最小的重復(fù)次數(shù) :
用圓括號(hào)分組
反向引用
這與以前匹配的組再次匹配 :
備擇方案
python|perl : 匹配“python”或“perl”
rub(y|le) : 匹配 “ruby” 或 “ruble”
Python(!+|?) : “Python”后跟一個(gè)或多個(gè)! 還是一個(gè)?
錨點(diǎn)
這需要指定匹配位置。
帶括號(hào)的特殊語法
開課吧廣場-人才學(xué)習(xí)交流平臺(tái)-開課吧
為了重復(fù)利用同一個(gè)正則對(duì)象,需要多次使用這個(gè)正則表達(dá)式的話,使用re.compile()保存這個(gè)正則對(duì)象以便復(fù)用,可以讓程序更加高效。
1)re.compile
參數(shù):
re.I 忽略大小寫
re.L 表示特殊字符集 w, W, b, B, s, S 依賴于當(dāng)前環(huán)境
re.M 多行模式
re.S 即為' . '并且包括換行符在內(nèi)的任意字符(' . '不包括換行符)
re.U 表示特殊字符集 w, W, b, B, d, D, s, S 依賴于 Unicode 字符屬性數(shù)據(jù)庫
re.X 為了增加可讀性,忽略空格和' # '后面的注釋
案例:
在上面,當(dāng)匹配成功時(shí)返回一個(gè) Match 對(duì)象,其中:
2)re.findall
在字符串中找到正則表達(dá)式所匹配的所有子串,并返回一個(gè)列表,如果有多個(gè)匹配模式,則返回元組列表,如果沒有找到匹配的,則返回空列表。
注意: match 和 search 是匹配一次 findall 匹配所有。
參數(shù):
案例:
3)re.finditer
和 findall 類似,在字符串中找到正則表達(dá)式所匹配的所有子串,并把它們作為一個(gè)迭代器返回。
案例:
4)re.split
split 方法按照能夠匹配的子串將字符串分割后返回列表。
案例:
從上篇Python re模塊 正則表達(dá)式到這篇,我們已經(jīng)把常用的正則匹配的方法學(xué)會(huì)了。
關(guān)注我,堅(jiān)持每日積累一個(gè)技巧, 長期堅(jiān)持 ,我們將會(huì)不斷進(jìn)步。
#python# #程序員# #請(qǐng)回答,你的年度知識(shí)點(diǎn)# #教育聽我說# #計(jì)算機(jī)#
當(dāng)前名稱:python正則函數(shù) 正則表達(dá)python
瀏覽路徑:http://muchs.cn/article44/docdghe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、ChatGPT、外貿(mào)建站、關(guān)鍵詞優(yōu)化、網(wǎng)頁設(shè)計(jì)公司、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)