99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

python正則表達式re模塊詳解

發(fā)布時間:2016-10-08 22:35  回復(fù):0  查看:3046   最后回復(fù):2016-10-08 22:35  

python中,正則表達式模塊--re也是很常用的,今天就和大家一起來聊聊這部分內(nèi)容,希望對大家學(xué)習(xí)python語言有所幫助。

首先是字符串中字符的替換問題,如果使用原生的Python方法,一般就是采用 replace 方法,下面我們采用re.sub方法同它進行比較。

第一個案例:我們的目標是把ROAD替換成RD.

python正則表達式re模塊詳解


似乎replace方法工作的不錯阿,完成了我給定的任務(wù)。如果是下面這個例子呢?

python正則表達式re模塊詳解

這里很明顯已經(jīng)出現(xiàn)了問題,因為這個字符串中含有BROAD,其中也有ROAD四個字符,但是我們的目標并沒有要求替換它。這里它也被替換成了BRD. ,這已經(jīng)足以說明replace方法的局限性。當(dāng)然,如果我們設(shè)計得當(dāng),這個方法也能用。

python正則表達式re模塊詳解

使用切片,我們也能做到這一點,僅僅把最后面的四個字符替換。不過,這種算法也有局限性,如果我們要將STREET 替換為ST. ,我們是不是應(yīng)該保留最后面的六個字符?這樣,每次替換都要修改代碼,并且很容易造成錯誤,對于調(diào)試來說很麻煩。

那么讓我們來試一下re.sub方法。

python正則表達式re模塊詳解

注意第一個參數(shù),‘ROAD$’,其中美元符代表了字符串的結(jié)尾,也就是說匹配結(jié)尾的ROAD字符。同樣的 ,代表字符串的開頭。我很快發(fā)現(xiàn), 有時候ROAD不一定在字符串的結(jié)尾,比如: s = '100 BROAD ROAD APT.3',此時,上面的方法就不適用了,沒關(guān)系,我們還有\\b。

python正則表達式re模塊詳解

是不是很神奇?\\b在左側(cè)意味著左側(cè)是個空格,在右側(cè)意味著右側(cè)是個空格,因此兩側(cè)\\b就是說,ROAD是一個獨立的單詞。也就是把獨立的ROAD換成RD.,這和我們的目標相同。

第二個案例:羅馬數(shù)字的匹配

在羅馬數(shù)字中,用七個字母組合來表示數(shù)字。

I = 1

V = 5

X = 10

L = 50

C = 100

D = 500

M = 1000

下面是幾個通常的規(guī)則來構(gòu)成羅馬數(shù)字:

大部分時候用字符相疊加來表示數(shù)字。I1, II2, III3。VI6(挨個看來,是“5 和 1”的組合),VII7,VIII8。

含有10的字符(IX,CM)最多可以重復(fù)出現(xiàn)三個。為了表示4,必須用同一位數(shù)的下一個更大的數(shù)字5來減去一。不能用IIII來表示4,而應(yīng)該是IV(意思是比51)。40寫做XL(比5010),41寫做XLI,42寫做XLII,43寫做XLIII,44寫做XLIV(比5010并且比51)。

有些時候表示方法恰恰相反。為了表示一個中間的數(shù)字,需要從一個最終的值來減。比如:9需要從10來減:8VIII,但9確是IX(比101),并不是VIIII字符不能重復(fù)4次)。90XC,900CM。

表示5的字符不能在一個數(shù)字中重復(fù)出現(xiàn)。10只能用X表示,不能用VV表示。100只能用C表示,而不是LL

羅馬數(shù)字是從左到右來計算,因此字符的順序非常重要。DC表示600,而CD完全是另一個數(shù)字400(比500100)。CI101,IC不是一個羅馬數(shù)字(因為你不能從1001,你只能寫成XCIX,表示比10010,且比101)。

對于千位數(shù)的匹配:

python正則表達式re模塊詳解

我們設(shè)定匹配模式是三個M,其中‘?’代表了這個參數(shù)是可選的,即三個可選的M參數(shù)。

第一次匹配M時,從^(字符串開頭)開始匹配,匹配到一個M,另外兩個由于是可選的,因此跳過,然后匹配到$(字符串結(jié)尾),匹配完成,返回一個匹配對象。第二,第三次匹配軍成功。第四次匹配時,由于最多只能匹配上三個M,而給了四個M,因此在匹配完三個M時尋找$時,尋找不到,因此匹配失敗,返回None。

值得注意的時,因為三個參數(shù)都是可選的,因此空字符串也能匹配上。

對于百位數(shù)的匹配:

100 = C

200 = CC

300 = CCC

400 = CD

500 = D

600 = DC

700 = DCC

800 = DCCC

900 = CM

因此有以下四種匹配模式:

CM

CD

可能有03個字符C0個表示千位為0)。

D緊跟在03個字符C的后面。

其中后兩種可以合并為一種:

一個可選的D,后面跟著03個字符C。

python正則表達式re模塊詳解

此時,匹配模式中即包含千位,也包含百位。 ‘|’就是邏輯運算中或的意思,當(dāng)出現(xiàn)幾種情況并行時使用,當(dāng)其中一個條件滿足時,就停止執(zhí)行后面的條件。

同樣可以發(fā)現(xiàn),空字符也是可以被匹配上的。

同理,我們分析了十位和個位的法則,也可以匹配上。

正則表達式非常強大,但它也并不是解決每一個問題的正確答案。你需要更多的了解來判斷哪些情況適合使用正則表達式。某些時候它可以解決你的問題,某些時候它可能帶來更多的問題。

預(yù)留問題:

1.“115.28.66.99[port=8080]”,這個字符串表示IP地址為115.28.66.99的服務(wù)器的8080端口是打開的,請用程序解析此字符串,然后打印出“IP地址為***的服務(wù)器的***端口是打開的

2.“115.28.66.99[port=21,type=ftp]”,這個字符串表示IP地址為115.28.66.99的服務(wù)器的21端口提供的是ftp服務(wù),其中如果“,type=ftp”部分被省略,則默認為http服務(wù)。請用程序解析此字符串,然后打印出“IP地址為***的服務(wù)器的***端口提供的服務(wù)為***”

 

文章來源:博客園

您還未登錄,請先登錄

熱門帖子

最新帖子

?