久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

自學Python教程【第五十七節】正則表達式(5)

歡迎大家來到自學Python教程教室,作為我們初探正則表達式第一段落的最后一節課,我們來看看上節課留下的比較難點的練習題怎么解吧。

來說上次的習題:

(021)88776543

010-55667890

02584453362

0571 66345673

一個可以匹配出所有結果的表達式是

\(?0\d{2,3}[) -]?\d{7,8}

解釋一下:

\(?

()在正則表達式里也有著特殊的含義,所以要匹配字符"(",需要用"\("。?表示這個括號是可有可無的。

0\d{2,3}

區號,0xx或者0xxx

[) -]?

在區號之后跟著的可能是")"、" "、"-",也可能什么也沒有。

\d{7,8}

7或8位的電話號碼

可是,這個表達式雖然能匹配出所有正確的數據(一般情況下,這樣已經足夠),但理論上也會匹配到錯誤的數據。因為()應當是成對出現的,表達式中對于左右兩個括號并沒有做關聯處理,例如(02188776543這樣的數據也是符合條件的。

我們可以用正則表達式中的“|”符號解決這種問題。“|”相當于Python中“or”的作用,它連接的兩個表達式,只要滿足其中之一,就會被算作匹配成功。

于是我們可以把()的情況單獨分離出來:

\(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}

使用“|”時,要特別提醒注意的是不同條件之間的順序。匹配時,會按照從左往右的順序,一旦匹配成功就停止驗證后面的規則。假設要匹配的電話號碼還有可能是任意長度的數字(如一些特殊的服務號碼),你應該把

|\d+

這個條件加在表達式的最后。如果放在最前面,某些數據就可能會被優先匹配為這一條件。你可以寫個測試用例體會一下兩種結果的不同。

關于正則表達式,我們已經講了5篇,介紹了正則表達式最最皮毛的一些用法。接下來,這個話題要稍稍告一段落,所以這部分的拓展以及更深層次的內容,就只能交給你能去探索了,任重而道遠,加油!

好啦,今天的分享到這立即結束了,希望大家能夠持續關注馬哥教育官網!每天都有會大量優質內容與大家分享歐!

聲明:文章來源于網絡,侵刪!

相關新聞

歷經多年發展,已成為國內好評如潮的Linux云計算運維、SRE、Devops、網絡安全、云原生、Go、Python開發專業人才培訓機構!

    1. 主站蜘蛛池模板: 阳城县| 贺州市| 巴彦县| 嘉黎县| 安达市| 广灵县| 西充县| 洛隆县| 兴海县| 莱芜市| 甘南县| 遂川县| 突泉县| 碌曲县| 谷城县| 保定市| 廉江市| 乐都县| 云霄县| 英山县| 新疆| 西华县| 武清区| 辽阳市| 盐城市| 武平县| 九江市| 通榆县| 葫芦岛市| 小金县| 海原县| 安岳县| 招远市| 辽阳市| 博乐市| 安达市| 齐河县| 新化县| 石泉县| 河北区| 乌兰察布市|