小編寫這篇文章的一個主要目的,主要是給大家去做一個介紹,介紹的內(nèi)容主要是關(guān)于Python re模塊的相關(guān)知識。包括怎么實現(xiàn)其正則表達(dá)式。具體的正則表達(dá)式要怎么去寫呢?就這些問題,下文會給大家一個詳細(xì)解答。
一、前言
在Python提供了re模塊,用于實現(xiàn)正則表達(dá)式的操作。在實現(xiàn)時,可以使用re模塊提供的方法(如,search()、match()、findall()等)進(jìn)行字符串處理,也可以先使用re模塊的compile()方法將模式字符串轉(zhuǎn)換為正則表達(dá)式對象,然后再使用該正則表達(dá)式對象的相關(guān)方法來操作字符串。
如果使用re模塊時,未將其引入,將拋出異常如圖所示:
二、匹配字符串
匹配字符串可以使用re模塊提供的match()、seardch()和findall()等方法。
1.使用match()方法進(jìn)行匹配
match()方法用于從字符串的開始處進(jìn)行匹配,如果在起始位置匹配成功,則返回Match對象,否則返回None,語法格式如下:
re.match(pattern,string,[flags])
參數(shù)說明:
pattern:表示模式字符串,由要匹配的正則表達(dá)式轉(zhuǎn)換而來
string:表示要匹配的字符串
flags:可選參數(shù),表示標(biāo)志位,用于控制匹配方式,如是否區(qū)分字母大小寫。常用的標(biāo)志如表所示:
例如,匹配字符串是否以“mr_”開頭,不區(qū)分字母大小寫,代碼如下:
import re pattern=r"mr_w+"#模式匹配字符串 string="MR_SHOP mr_shop"#要匹配的字符串 match=re.match(pattern,string,re.I)#匹配字符,不區(qū)分大小寫 print(match)#輸出匹配結(jié)果 string="項目名稱MR_SHOP mr_shop" match=re.match(pattern,string,re.I)#匹配字符,不區(qū)分大小寫 print(match)#輸出匹配結(jié)果
執(zhí)行結(jié)果如下:
從上面執(zhí)行結(jié)果中可以看出,字符串"MR_SHOP"是以“mr_”開頭,所以返回一個match對象,而字符串“項目名稱MR_SHOP”不是以“mr_”開頭,將返回“None”。這是因為match()方法從字符串的開始位置開始匹配,當(dāng)?shù)谝粋€字母不符合條件時,則不再進(jìn)行匹配,直接返回None。
Match對象中包含了匹配值得位置和匹配數(shù)據(jù),其中:
要獲取匹配值的起始位置可以使用Match對象的start()方法;
要獲得匹配值的結(jié)束位置可以使用end()方法;
通過span()方法可以返回匹配位置元組;
通過string屬性可以獲取要匹配的字符串
代碼如下:
import re pattern=r"mr_w+"#模式匹配字符串 string="MR_SHOP mr_shop"#要匹配的字符串 match=re.match(pattern,string,re.I)#匹配字符,不區(qū)分大小寫 print("匹配值的起始位置",match.start()) print("匹配值的結(jié)束位置",match.end()) print("匹配位置元組",match.span()) print("要匹配的字符串",match.string) print("匹配數(shù)據(jù)",match.group())
執(zhí)行結(jié)果如下:
2.使用search()方法進(jìn)行匹配
search()方法用于在整個字符串搜索第一個匹配值,如果匹配成功,則返回match對象,否則返回None,語法格式如下:
re.search(pattern,string,[flags])
參數(shù)說明:
pattern:表示模式字符串,由要匹配的正則表達(dá)式轉(zhuǎn)換而來
string:表示要匹配的字符串
flags:可選參數(shù),表示標(biāo)志位,用于控制匹配方式,如是否區(qū)分字母大小寫。
例如,所示一個以“mr_”開頭的字符串,不區(qū)分大小寫,代碼如下:
import re pattern=r"mr_w+"#模式匹配字符串 string="MR_SHOP mr_shop"#要匹配的字符串 match=re.search(pattern,string,re.I)#匹配字符,不區(qū)分大小寫 print(match)#輸出匹配結(jié)果 string="項目名稱MR_SHOP mr_shop" match=re.search(pattern,string,re.I)#匹配字符,不區(qū)分大小寫 print(match)#輸出匹配結(jié)果
執(zhí)行結(jié)果如下:
從上面運行結(jié)果中可以看出,search()方法不僅僅是在字符串的起始位置搜索,其他位置有符合的匹配也可以。
3.使用findall()方法進(jìn)行匹配
findall()方法用于整個字符串中的搜索所有符合正則表達(dá)式的字符串,并以列表的形式返回,如果匹配成功,則返回包含匹配結(jié)構(gòu)的列表,否則返回空列表。其語法格式如下:
re.findall(pattern,string,[flags])
參數(shù)說明:
pattern:表示模式字符串,由要匹配的正則表達(dá)式轉(zhuǎn)換而來
string:表示要匹配的字符串
flags:可選參數(shù),表示標(biāo)志位,用于控制匹配方式,如是否區(qū)分字母大小寫。
例如,所示一個以“mr_”開頭的字符串,不區(qū)分大小寫,代碼如下:
import re pattern=r"mr_w+"#模式匹配字符串 string="MR_SHOP mr_shop"#要匹配的字符串 match=re.findall(pattern,string,re.I)#匹配字符,不區(qū)分大小寫 print(match)#輸出匹配結(jié)果 string="項目名稱MR_SHOP mr_shop" match=re.findall(pattern,string,re.I)#匹配字符,不區(qū)分大小寫 print(match)#輸出匹配結(jié)果
執(zhí)行結(jié)果如下:
如果在指定的模式字符串中,包含分組,則返回與分組匹配的文本列表。例如:
import re pattern=r"[1-9]{1,3}(.[0-9]{1,3}){3}"#模式字符串 str1="127.0.0.1 192.168.1.66"#要匹配的字符串 match=re.findall(pattern,str1)#進(jìn)行模式匹配 print(match)
執(zhí)行結(jié)果如下:
從上面結(jié)果中可以看出,并沒有得到匹配的IP地址,這是因為在模式字符串中出現(xiàn)了分組,所以得到的結(jié)果是根據(jù)分組進(jìn)行匹配的結(jié)果,即“(.[0-9]{1,3})”匹配的結(jié)果。如果想獲取整個模式字符串的匹配,可以將整個模式字符串使用一對小括號進(jìn)行分組,然后再獲取結(jié)果時,只取返回值列表的每個元素(是一個元組)的第1個元素。代碼如下:
import re pattern=r"([1-9]{1,3}(.[0-9]{1,3}){3})"#模式字符串 str1="127.0.0.1 192.168.1.66"#要匹配的字符串 match=re.findall(pattern,str1)#進(jìn)行模式匹配 for item in match: print(item[0])
執(zhí)行結(jié)果如下:
三、替換字符串
sub()方法用于實現(xiàn)字符串替換,語法格式如下:
re.sub(pattern,sep1,string,count,flags)
參數(shù)說明:
pattern:表示模式字符串,由要匹配的正則表達(dá)式轉(zhuǎn)換而來
sep1:表示替換的字符串
string:表示查找要被替換的原始字符串
count:可以參數(shù),表示模式匹配后替換
flags:可選參數(shù),表示標(biāo)志位,用于控制匹配方式,如是否區(qū)分字母大小寫。
import re pattern=r"1[34578]d{9}"#定義要替換的模式字符串 string="中獎號碼為:84978981聯(lián)系電話為:13611111111" result=re.sub(pattern,"1xxxxxxxxxx",string) print(result)
執(zhí)行結(jié)果如下:
四、使用正則表達(dá)式分割字符串
splist()方法用于實現(xiàn)根據(jù)正則表達(dá)式分割字符串,并以列表的形式返回,其作用與字符串對象的splist()方法類似,所不同的就是分割字符由模式字符串指定。語法格式如下:
re.splist(pattern,string,[maxsplist],[flags])
參數(shù)說明:
pattern:表示模式字符串,由要匹配的正則表達(dá)式轉(zhuǎn)換而來
string:表示要匹配的字符串
maxsplist:可選參數(shù),表示最大的拆分次數(shù)。
flags:可選參數(shù),表示標(biāo)志位,用于控制匹配方式,如是否區(qū)分字母大小寫。
例如:從給定的URL地址中提取出請求地址和各個參數(shù),代碼如下:
import re pattern=r"[?|&]"#定義分割符 url='http://www.baidu.com/login.jsp?username="mr"&pwd="mrsoft"' result=re.split(pattern,url)#分割字符串 print(result)
執(zhí)行結(jié)果如下:
綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家?guī)韼椭?/p>
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/128299.html
摘要:正則表達(dá)式就是用來描述他稱為正則集的代數(shù)的表達(dá)式,因此采用正則表達(dá)式這個術(shù)語。文本中正則表達(dá)式結(jié)束搜索的索引值與和方法的同名參數(shù)相同。對象是一個編號的正則表達(dá)式通過提供的一系列方法可以對文本進(jìn)行匹配查找。 一、概述 今天這篇文章帶領(lǐng)大家學(xué)習(xí)一下Python中的正則表達(dá)式,當(dāng)然了,正則表達(dá)式本身的內(nèi)容就足以寫好幾本書了,我們這里列出的內(nèi)容,僅僅是Python中常用的和基礎(chǔ)的一些內(nèi)容。 那...
摘要:今天來給大家分享一份關(guān)于比較詳細(xì)的正則表達(dá)式寶典,學(xué)會之后你將對正則表達(dá)式達(dá)到精通的狀態(tài)。正則表達(dá)式是用在方法當(dāng)中,大多數(shù)的字符串檢索都可以通過來完成。導(dǎo)入模塊在使用正則表達(dá)式之前,需要導(dǎo)入模塊。 ...
摘要:準(zhǔn)備工作初探,這個文章屬于自己的一個總結(jié)。所以教程面向新手,無技術(shù)含量。凡是報錯信息看到,就是表示縮進(jìn)不一致。注由于原網(wǎng)址不方便公布,代碼中的網(wǎng)址全部替換為了。 準(zhǔn)備工作 初探python,這個文章屬于自己的一個總結(jié)。所以教程面向新手,無技術(shù)含量。python環(huán)境Linux基本都有,Windows下官網(wǎng)也提供了便利的安裝包,怎么安裝配置網(wǎng)上有很多教程在此就不一一說明。我使用的pytho...
摘要:下面跟大家詳細(xì)分享一下寫爬蟲抓取靜態(tài)網(wǎng)站的全過程。而我們上面說的元字符都代表一定的規(guī)則和占據(jù)一定的字符。 遇到的需求 前段時間需要快速做個靜態(tài)展示頁面,要求是響應(yīng)式和較美觀。由于時間較短,自己動手寫的話也有點麻煩,所以就打算上網(wǎng)找現(xiàn)成的。 中途找到了幾個頁面發(fā)現(xiàn)不錯,然后就開始思考怎么把頁面給下載下來。 由于之前還沒有了解過爬蟲,自然也就沒有想到可以用爬蟲來抓取網(wǎng)頁內(nèi)容。所以我采取的辦...
小編寫這篇文章的一個主要目的,主要是給大家去做一個解答,解答的內(nèi)容主要還是python相關(guān)事宜,比如,可以用python正則表達(dá)式去匹配和提取中文漢字,那么,具體的內(nèi)容做法是什么呢?下面就給大家詳細(xì)解答下。 python用正則表達(dá)式提取中文 Python re正則匹配中文,其實非常簡單,把中文的unicode字符串轉(zhuǎn)換成utf-8格式就可以了,然后可以在re中隨意調(diào)用 unicode中中...
閱讀 919·2023-01-14 11:38
閱讀 891·2023-01-14 11:04
閱讀 750·2023-01-14 10:48
閱讀 2039·2023-01-14 10:34
閱讀 956·2023-01-14 10:24
閱讀 835·2023-01-14 10:18
閱讀 506·2023-01-14 10:09
閱讀 583·2023-01-14 10:02