自學(xué)Python教程【第五十七節(jié)】正則表達(dá)式(5)
歡迎大家來到自學(xué)Python教程教室,作為我們初探正則表達(dá)式第一段落的最后一節(jié)課,我們來看看上節(jié)課留下的比較難點的練習(xí)題怎么解吧。
來說上次的習(xí)題:
(021)88776543
010-55667890
02584453362
0571 66345673
一個可以匹配出所有結(jié)果的表達(dá)式是
\(?0\d{2,3}[) -]?\d{7,8}
解釋一下:
\(?
()在正則表達(dá)式里也有著特殊的含義,所以要匹配字符"(",需要用"\("。?表示這個括號是可有可無的。
0\d{2,3}
區(qū)號,0xx或者0xxx
[) -]?
在區(qū)號之后跟著的可能是")"、" "、"-",也可能什么也沒有。
\d{7,8}
7或8位的電話號碼
可是,這個表達(dá)式雖然能匹配出所有正確的數(shù)據(jù)(一般情況下,這樣已經(jīng)足夠),但理論上也會匹配到錯誤的數(shù)據(jù)。因為()應(yīng)當(dāng)是成對出現(xiàn)的,表達(dá)式中對于左右兩個括號并沒有做關(guān)聯(lián)處理,例如(02188776543這樣的數(shù)據(jù)也是符合條件的。
我們可以用正則表達(dá)式中的“|”符號解決這種問題?!皘”相當(dāng)于Python中“or”的作用,它連接的兩個表達(dá)式,只要滿足其中之一,就會被算作匹配成功。
于是我們可以把()的情況單獨(dú)分離出來:
\(0\d{2,3}\)\d{7,8}
其他情況:
0\d{2,3}[ -]?\d{7,8}
合并:
\(0\d{2,3}\)\d{7,8}|0\d{2,3}[ -]?\d{7,8}
使用“|”時,要特別提醒注意的是不同條件之間的順序。匹配時,會按照從左往右的順序,一旦匹配成功就停止驗證后面的規(guī)則。假設(shè)要匹配的電話號碼還有可能是任意長度的數(shù)字(如一些特殊的服務(wù)號碼),你應(yīng)該把
|\d+
這個條件加在表達(dá)式的最后。如果放在最前面,某些數(shù)據(jù)就可能會被優(yōu)先匹配為這一條件。你可以寫個測試用例體會一下兩種結(jié)果的不同。
關(guān)于正則表達(dá)式,我們已經(jīng)講了5篇,介紹了正則表達(dá)式最最皮毛的一些用法。接下來,這個話題要稍稍告一段落,所以這部分的拓展以及更深層次的內(nèi)容,就只能交給你能去探索了,任重而道遠(yuǎn),加油!
好啦,今天的分享到這立即結(jié)束了,希望大家能夠持續(xù)關(guān)注馬哥教育官網(wǎng)!每天都有會大量優(yōu)質(zhì)內(nèi)容與大家分享歐!
聲明:文章來源于網(wǎng)絡(luò),侵刪!