怎么使用Pythonre正則表達(dá)式模塊-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買(mǎi)多久送多久,劃算不套路!

創(chuàng)新互聯(lián)技術(shù)團(tuán)隊(duì)十年來(lái)致力于為客戶提供網(wǎng)站設(shè)計(jì)制作、網(wǎng)站建設(shè)成都品牌網(wǎng)站建設(shè)、營(yíng)銷(xiāo)型網(wǎng)站、搜索引擎SEO優(yōu)化等服務(wù)。經(jīng)過(guò)多年發(fā)展,公司擁有經(jīng)驗(yàn)豐富的技術(shù)團(tuán)隊(duì),先后服務(wù)、推廣了上千網(wǎng)站,包括各類(lèi)中小企業(yè)、企事單位、高校等機(jī)構(gòu)單位。

怎么使用Python re正則表達(dá)式模塊?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

正則表達(dá)式(Regular Expression)用于描述一種字符串匹配的模式,它可用于檢查一個(gè)字符串是否含有某個(gè)子串,也可用于從字符串中提取匹配的子串,或者對(duì)字符串中匹配的子串執(zhí)行替換操作。

很多讀者都會(huì)覺(jué)得正則表達(dá)式是非常神奇、高級(jí)的知識(shí),實(shí)際上正則表達(dá)式確實(shí)是一種非常實(shí)用的工具。正則表達(dá)式的入門(mén)并不難,任意字符串都可以被當(dāng)成正則表達(dá)式來(lái)使用,例如“abc”,它也是一個(gè)正則表達(dá)式,只是它只能匹配“abc”字符串。

當(dāng)然,如果正則表達(dá)式僅能匹配“abc”這樣的字符串,那么正則表達(dá)式也就不值得學(xué)習(xí)了。事實(shí)上,正則表達(dá)式包含的知識(shí)點(diǎn)比較多,它的模式匹配能力也非常強(qiáng),初學(xué)者可以由淺入深地學(xué)習(xí)。

對(duì)于 Python 開(kāi)發(fā)者來(lái)說(shuō),掌握正則表達(dá)式確實(shí)是一個(gè)很重要的技能。在掌握了正則表達(dá)式之后,Python 開(kāi)發(fā)者也可使用正則表達(dá)式來(lái)開(kāi)發(fā)數(shù)據(jù)抓取、網(wǎng)絡(luò)爬蟲(chóng)等程序。

實(shí)際上,掌握 Python 的正則表達(dá)式并不難,無(wú)非就是幾個(gè)簡(jiǎn)單的函數(shù)。在 Python 的交互式解釋器中先導(dǎo)入 re 模塊,然后輸入 re.__all__ 命令,即可看到該模塊所包含的全部屬性和函數(shù):

>>> re.__all__
['match', 'fullmatch', 'search', 'sub', 'subn', 'split', 'findall', 'finditer', 'compile', 'purge', 'template', 
'escape', 'error', 'A', 'I', 'L', 'M', 'S', 'X', 'U', 'ASCII', 'IGNORECASE', 'LOCALE', 'MULTILINE', 'DOTALL', 
'VERBOSE', 'UNICODE']

從上面的輸出結(jié)果可以看出,re 模塊包含了為數(shù)不多的幾個(gè)函數(shù)和屬性(用于控制正則表達(dá)式匹配的幾個(gè)選項(xiàng))。下面先介紹這些函數(shù)的作用:

re.compile(pattern, flags=0):該函數(shù)用于將正則表達(dá)式字符串編譯成 _sre.SRE_Pattern 對(duì)象,該對(duì)象代表了正則表達(dá)式編譯之后在內(nèi)存中的對(duì)象,它可以緩存并復(fù)用正則表達(dá)式字符串。如果程序需要多次使用同一個(gè)正則表達(dá)式字符串,則可考慮先編譯它。

該函數(shù)的 pattern 參數(shù)就是它所編譯的正則表達(dá)式字符串,flags 則代表了正則表達(dá)式的匹配旗標(biāo)。編譯得到的 _sre.SRE_Pattern 對(duì)象包含了 re 模塊中絕大部分函數(shù)對(duì)應(yīng)的方法。比如下面兩行代碼表示先編譯正則表達(dá)式,然后調(diào)用正則表達(dá)式的 search() 方法執(zhí)行匹配:

#先編譯正則表達(dá)式
p = re.compile('abc')
#調(diào)用_sre.SRE_Pattern 對(duì)象的search()方法
p.search("www.abc.com")

上面兩行代碼和下面代碼的效果基本相同:

#直接用正則表達(dá)式匹配目標(biāo)字符串
re.search('abc','www.abc.com')

對(duì)于上面兩種方式,由于第一種方式預(yù)編譯了正則表達(dá)式,因此程序可復(fù)用 p 對(duì)象(該對(duì)象緩存了正則表達(dá)式字符串),所以具有更好的性能。re.match(pattern, string, flags=0):嘗試從字符串的開(kāi)始位置來(lái)匹配正則表達(dá)式,如果從開(kāi)始位置匹配不成功,match() 函數(shù)就返回 None 。其中 pattern 參數(shù)代表正則表達(dá)式;string 代表被匹配的字符串;flags 則代表正則表達(dá)式的匹配旗標(biāo)。該函數(shù)返回 _sre.SRE_Match 對(duì)象,該對(duì)象包含的 span(n) 方法用于獲取第 n+1 個(gè)組的匹配位置,group(n) 方法用于獲取第 n+1 個(gè)組所匹配的子串。re.search(pattern, string, flags=0):掃描整個(gè)字符串,并返回字符串中第一處匹配 pattern 的匹配對(duì)象。其中 pattern 參數(shù)代表正則表達(dá)式;string 代表被匹配的字符串;flags 則代表正則表達(dá)式的匹配旗標(biāo)。該函數(shù)也返回 _sre.SRE_Match 對(duì)象。
根據(jù)上面介紹不難發(fā)現(xiàn),match() 與 search() 的區(qū)別在于,match() 必須從字符串開(kāi)始處就匹配,但 search() 可以搜索整個(gè)字符串。例如如下程序:

import re
m1 = re.match('www', 'www.fkit.org')# 開(kāi)始位置可以匹配
print(m1.span())  # span返回匹配的位置
print(m1.group()) # group返回匹配的組
print(re.match('fkit', 'www.fkit.com')) # 開(kāi)始位置匹配不到,返回None
m2 = re.search('www', 'www.fkit.org') # 開(kāi)始位置可以匹配
print(m2.span())
print(m2.group())
m3 = re.search('fkit', 'www.fkit.com') # 中間位置可以匹配,返回Match對(duì)象
print(m3.span())
print(m3.group())

運(yùn)行上面程序,可以看到如下輸出結(jié)果:

(0, 3)
www
None
(0, 3)
www
(4, 8)
fkit

從上面的輸出結(jié)果可以看出,match() 函數(shù)要求必須從字符串開(kāi)始處匹配,而 search() 函數(shù)則可掃描整個(gè)字符串,從中間任意位置開(kāi)始匹配。re.findall(pattern, string, flags=0):掃描整個(gè)字符串,并返回字符串中所有匹配 pattern 的子串組成的列表。其中 pattern 參數(shù)代表正則表達(dá)式;string 代表被匹配的宇符串;flags 則代表正則表達(dá)式的匹配旗標(biāo)。re.finditer(pattern, string, flags=0):掃描整個(gè)字符串,并返回字符串中所有匹配 pattern 的子串組成的迭代器,迭代器的元素是 _sre.SRE_Match 對(duì)象。其中 pattern 參數(shù)代表正則表達(dá)式;string 代表被匹配的字符串;flags 則代表正則表達(dá)式的匹配旗標(biāo)。

從上面介紹不難看出,findall() 與 finditer() 函數(shù)的功能基本相似,區(qū)別在于它們的返回值不同,findall() 函數(shù)返回所有匹配 patten 的子串組成的列表;而 finditer() 函數(shù)則返回所有匹配 pattern 的子串組成的選代器。

如果對(duì)比 findall()、finditer() 和 search() 函數(shù),它們的區(qū)別也很明顯,search() 只返回字符串中第一處匹配 pattern 的子串;而 findall() 和 finditer() 則返回字符串中所有匹配 pattern 的子串。

import re
# 返回所有匹配pattern的子串組成的列表, 忽略大小寫(xiě)
print(re.findall('fkit', 'FkIt is very good , Fkit.org is my favorite' , re.I))
# 返回所有匹配pattern的子串組成的迭代器, 忽略大小寫(xiě)
it = re.finditer('fkit', 'FkIt is very good , Fkit.org is my favorite' , re.I)
for e in it:
    print(str(e.start()) + "-->" + e.group())

re.fullmatch(pattem, string, flags=0):該函數(shù)要求整個(gè)字符串能匹配 pattern,如果匹配則返回包含匹配信息的 _sre.SRE_Match 對(duì)象;否則返回 None。re.sub(pattern, repl, string, count=0, flags=0):該函數(shù)用于將 string 字符串中所有匹配 pattern 的內(nèi)容替換成 repl;repl 既可是被替換的字符串,也可是一個(gè)函數(shù)。count 參數(shù)控制最多替換多少次,如果指定 count 為 0 ,則表示全部首換。如下程序示范了 sub() 函數(shù)的簡(jiǎn)單用法:

import re
my_date = '2008-08-18'
# 將my_date字符串里中畫(huà)線替換成斜線
print(re.sub(r'-', '/' , my_date))
# 將my_date字符串里中畫(huà)線替換成斜線,只替換一次
print(re.sub(r'-', '/' , my_date, 1))

運(yùn)行上面程序,可以看到如下輸出結(jié)果:

2008/08/18
2008/08-18

看完上述內(nèi)容,你們掌握怎么使用Python re正則表達(dá)式模塊的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝各位的閱讀!

當(dāng)前題目:怎么使用Pythonre正則表達(dá)式模塊-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://bm7419.com/article32/gddpc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、定制網(wǎng)站、品牌網(wǎng)站建設(shè)網(wǎng)站改版、小程序開(kāi)發(fā)品牌網(wǎng)站制作

廣告

聲明:本網(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í)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)