1. 程式人生 > >Python 正則表達式、re模塊

Python 正則表達式、re模塊

劃線 函數 單詞 pos 技術分享 border 十六進制 範圍 特點

一、正則表達式

對字符串的操作的需求幾乎無處不在,比如網站註冊時輸入的手機號、郵箱判斷是否合法。雖然可以使用python中的字符串內置函數,但是操作起來非常麻煩,代碼冗余不利於重復使用。

正則表達式是一種特殊的字符串序列,使用它可以非常方便的匹配一個字符串是否合法。

1)判斷手機號是否合法:根據手機號碼一共11位並且是只以13、15、18、17開頭的數字這些特點,我們用python寫了如下代碼:

技術分享圖片
content = input(>>>)
if content.isdigit():
    if len(content) == 11:
        if content.startswith(
13) or content.startswith(15) or content.startswith(18) or content.startswith(17): print(ok) else: print(手機號錯誤) else: print(必須11位!) else: print(必須全為數字)
Python判斷手機號是否合法

2)正則表達式判斷:

import re
phone_num = input(>>>
) if re.match(r^(13|15|18|17)[0-9]{9}$,phone_num): print(ok)

二、字符組:只表示一個位置的字符範圍

首先談到正則,就只和字符串相關了。如果在一個位置的一個值,不會出現什麽變化,那麽是不需要規則的。比如你要用"1"去匹配"1",或者用"2"去匹配"2",直接就可以匹配上。這連python的字符串操作都可以輕松做到。那麽在之後我們更多要考慮的是在同一個位置上可以出現的字符的範圍

在同一個位置可能出現的各種字符組成了一個字符組,在正則表達式中用[ ]表示

正則
待匹配字符
匹配
結果
說明
[0123456789]
8
True
在一個字符組裏枚舉合法的所有字符,字符組裏的任意一個字符
和"待匹配字符"相同都視為可以匹配
[0123456789]
a
False
由於字符組中沒有"a"字符,所以不能匹配
[0-9]
7
True
也可以用-表示範圍,[0-9]就和[0123456789]是一個意思
[a-z]
s
True
同樣的如果要匹配所有的小寫字母,直接用[a-z]就可以表示
[A-Z]
B
True
[A-Z]就表示所有的大寫字母
[0-9a-fA-F]
e
True
可以匹配數字,大小寫形式的a~f,用來驗證十六進制字符

元字符:

元字符
匹配內容
. 匹配除換行符以外的任意字符
\w 匹配字母或數字或下劃線
\s 匹配任意的空白符
\d 匹配數字
\n 匹配一個換行符
\t 匹配一個制表符
\b 匹配一個單詞的結尾
^ 匹配字符串的開始
$ 匹配字符串的結尾
\W
匹配非字母或數字或下劃線
\D
匹配非數字
\S
匹配非空白符
a|b
匹配字符a或字符b
()
匹配括號內的表達式,也表示一個組
[...]
匹配字符組中的字符
[^...]
匹配除了字符組中字符的所有字符

量詞:僅修飾前面緊跟的字符組或字符串

量詞
用法說明
* 重復零次或更多次
+ 重復一次或更多次
? 重復零次或一次
{n} 重復n次
{n,} 重復n次或更多次
{n,m} 重復n到m次

Python 正則表達式、re模塊