正則表達(dá)式是一個(gè)特殊的字符序列,它用來檢查一個(gè)字符串是否與某種模式匹配。正則表達(dá)式在編譯程序中至關(guān)重要,但并不是每個(gè)人都需要特別深入的學(xué)習(xí)和掌握。在此,只介紹一些最基本的應(yīng)用。
成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括涪陵網(wǎng)站建設(shè)、涪陵網(wǎng)站制作、涪陵網(wǎng)頁制作以及涪陵網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,涪陵網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到涪陵省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
1、元字符
元字符是構(gòu)成正則表達(dá)式的一些特殊字符。在正則表達(dá)式中,元字符被賦予了新的含義。
下面介紹一些常用的元字符及其含義:
. 匹配除換行符以外的任意字符。
w 匹配字母、數(shù)字、下劃線或漢字。
W 匹配w所匹配的字符以外的字符。
s 匹配單個(gè)空白符(包括Tab鍵和換行符)。
S 匹配除s匹配的字符以外的字符。
d 匹配數(shù)字。
b 匹配單詞的分界符,如:空格、標(biāo)點(diǎn)符號(hào)或換行符。
^ 匹配字符串的開始
$ 匹配字符串的結(jié)束
2、限定符
限定符是在正則表達(dá)式中用來指定數(shù)量的字符。常用的限定符有:
? 匹配前面的字符0或1次。如:zo?m可以匹配zom和zm,但不能匹配 zoom
+ 匹配前面的字符1或n次。如:zo?m可以匹配zom和zoom,但不能匹配zm
* 匹配前面的字符0或n次。如:zo?m可以匹配zom、zoom和zm
{n} 匹配前面的字符n次。如:zo{2}m可以匹配zoom,但不能匹配zom和zm
{n,} 匹配前面的字符至少n次。如:zo{1,}m可以匹配zom和zoom,但不能匹配zm
{n,m} 匹配前面的字符至少n次,最多m次。如:zo{1,2}m可以匹配zom和zoom,但不能匹配zm
3、方括號(hào)”[ ]”的用途
方括號(hào)“[ ]”里可以列出某個(gè)字符范圍。如:[aeiou]表示匹配任意一個(gè)元音字母,[zqsl]表示匹配姓氏“趙錢孫李”的拼音第一個(gè)字母。
4、排除字符
方括號(hào)”[ ]”中的“^”字符表示排除的意思,如:[^aeiou]表示匹配任意一個(gè)非元音字母的字符。
5、選擇字符
字符“|”相當(dāng)于“或”。如:(^d{3}[-]d{8})|(^d{4}[-]d{7})$可以匹配形如” - ”或“ - ”的電話號(hào)碼格式。
6、轉(zhuǎn)義字符
對(duì)于已經(jīng)用于定義元字符和限定符的字符,需要加轉(zhuǎn)義符“”來表示。
如:為了匹配形如“192.168.0.1”的IPv4地址(1~255.0~255.0~255.0~255),可以用這樣的正則表達(dá)式:^(25[0-5]|2[0-4][0-9]|[0,1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]).(25[0-5]|2[0-4][0-9]|[0,1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0).(25[0-5]|2[0-4][0-9]|[0,1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0).(25[0-5]|2[0-4][0-9]|[0,1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$
這里解釋一下第一段IP地址的規(guī)則,取值范圍為1~255,可分解為以下情況:
250~255:25[0-5];
200~249:2[0-4][0-9];
100~199:[01]{1}[0-9]{2};
0~99: [0-9]{1}[1-9]
再加上”.”: .
其他三段地址和第一段相似。
7、“( )”可以用于分組
在正則表達(dá)式中,用“( )”括起來的部分是一個(gè)整體。
8、r(或R)的意義
在正則表達(dá)式中,為了保證模式字符串為原生字符串(沒有經(jīng)過加工處理的字符串),可以在模式字符串前加上一個(gè)字符‘r’或‘R’。例如:
# 這里用到對(duì)的re.match()方法接下來介紹
import re # 導(dǎo)入re模塊
re.match('bPy[a-z]+','Python') # 表達(dá)式'bPy[a-z]+'不能匹配’Python’
re.match('bPy[a-z]+','Python') # 表達(dá)式'bPy[a-z]+'可以匹配’Python’
在上述代碼中,原本要用作匹配單詞開始或結(jié)束的元字符’b’在表達(dá)式中字符串中會(huì)被視為轉(zhuǎn)義一個(gè)字符‘b’,為了轉(zhuǎn)義’b’就不得不再加一個(gè)’’符號(hào)。
也可以采用下面的方法:
re.match(r'bPy[a-z]+','Python') #加字符’r’,可以保證原生字符串
9、match()方法
Match()方法 嘗試從字符串的起始位置匹配一個(gè)模式,如果不是起始位置匹配成功的話,match() 就返回 none。
語法格式:
re.match(pattern, string, [flags])
其中,pattern表示匹配的正則表達(dá)式;string是要匹配的字符串;flags表示標(biāo)志位,用于控制正則表達(dá)式的匹配方式,如:re.I表示不區(qū)分大小寫。
例:
import re #導(dǎo)入re模塊
print(re.match('www', '').span()) #span()函數(shù)可以獲取匹配的位置
print(re.match('org', ''))
輸出結(jié)果為:
(0, 3) #在位置0到3(不包括3)匹配成功
None #從起始位置未能匹配成功
10、search()方法
search()方法用于在整個(gè)字符串中搜索第一個(gè)匹配的值,如果匹配成功,則返回Match對(duì)象,否則返回None。
語法格式:
re.search(pattern, string, [flags])
其中,pattern表示匹配的正則表達(dá)式;string是要匹配的字符串;flags表示標(biāo)志位,用于控制正則表達(dá)式的匹配方式,如:re.I表示不區(qū)分大小寫。
例如:
re.search(r'Pyw+','It's easy to use Python, but it's not easy to learn Python.')
可以看出,目標(biāo)字符串“It's easy to use Python, but it's not easy to learn Python.”中一共有兩個(gè)‘Python’,search()方法可以從字符串的起始位置開始查找到‘Python’,當(dāng)找到第一個(gè)匹配值后就停止查找,返回位置信息。
match()和search()的比較
match()要求目標(biāo)字符串的起始位置就能匹配,search()對(duì)目標(biāo)字符串全段進(jìn)行逐次匹配,只要首次匹配成功就停止匹配。
請(qǐng)看下例:
import re
print(re.match(r'Pyw+','It's easy to use Python, but it's not easy to learn Python.'))
輸出結(jié)果:None
11、findall()方法
findall()方法用于在整個(gè)字符串中搜索所有匹配的值,如果匹配成功,則返回以匹配值為元素的列表,否則返回空列表。
語法格式:
re.findall(pattern, string[, flags])
其中,pattern表示匹配的正則表達(dá)式;string是要匹配的字符串;flags表示標(biāo)志位,用于控制正則表達(dá)式的匹配方式,如:re.I表示不區(qū)分大小寫。
例:
import re
print(re.findall(r'Pyw+','It's easy to use Python, but it's not easy to learn Python.'))
輸出結(jié)果:['Python', 'Python']
可以看出,findall()的結(jié)果沒有指出匹配的具體位置。
12、正則表達(dá)式的應(yīng)用
字符串替換
這里要用到sub()方法。它的語法格式如下:
re.sub(pattern, repl, string [,count] [,flgs])
其中,pattern是模式字符串;repl是用于替換的字符串;string是原字符串;可選參數(shù)count為模式匹配后替換的最大次數(shù),省缺表示替換所有的匹配;可選參數(shù)flags的意義與前面的方法的該參數(shù)一致。
例:
import re
str1='x=36.567 y=123.234'
str2=re.sub('.d+','',str1) #用空格代替小數(shù)點(diǎn)及其后的數(shù)字
print(str2)
輸出結(jié)果:x=36 y=123
分隔字符串
這里要用到split()方法。它的返回值為一個(gè)列表,它的語法格式如下:
re.split(pattern, string [,maxsplit] [,flgs])
其中,pattern是模式字符串;string是原字符串;可選參數(shù)maxsplit為最大拆分次數(shù),省缺表示拆分所有的匹配;可選參數(shù)flags的意義與前面的方法的該參數(shù)一致。
例:
import re
str='白日依山盡,黃河入海流。欲窮千里目,更上一層樓!'
re.split(r',|。|!',str) #按照“,”、“?!?、“!”分隔字符串。
['白日依山盡', '黃河入海流', '欲窮千里目', '更上一層樓', '']
注意,返回值列表中多出了一個(gè)空字符。
match()函數(shù)只檢測(cè)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á)式?jīng)]有錯(cuò),只是你用的Python函數(shù)re.search()只能匹配一次,如果要匹配多次需要用re.findall()函數(shù),它返回一個(gè)list.改正后完整的Python程序如下
import?re
fw?=?'span?class="price"16000span?class="danwei"span?class="price"待定span?class="danwei"'
pattern??=?re.compile(r'span?class="price"(.*?)span?class=\"danwei"')
result?=?re.findall(pattern,fw)
print(result)
正則表達(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è)很長(zhǎng)的名稱,如IGNORECASE,和一個(gè)簡(jiǎn)短的單字母形式,如。
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)的特殊語法
開課吧廣場(chǎng)-人才學(xué)習(xí)交流平臺(tái)-開課吧
分享題目:python函數(shù)匹配,python 數(shù)據(jù)匹配
網(wǎng)站路徑:http://www.rwnh.cn/article24/dsigdce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、響應(yīng)式網(wǎng)站、關(guān)鍵詞優(yōu)化、網(wǎng)站營(yíng)銷、企業(yè)網(wǎng)站制作、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)