正則表達式是一種用來匹配字符串的強有力的武器。它的設計思想是用一種描述性的語言來給字符串定義一個規則,凡是符合規則的字符串,咱們就認爲它「匹配」了,不然,該字符串就是不合法的。python
因此咱們判斷一個字符串是不是合法的Email的方法是:正則表達式
建立一個匹配Email的正則表達式;設計
在正則表達式中,若是直接給出字符,就是精確匹配。用\d
能夠匹配一個數字,\w
能夠匹配一個字母或數字,因此:code
'00\d'
能夠匹配'007'
,但沒法匹配'00A'
;字符串
'\d\d\d'
能夠匹配'010'
;變量
'\w\w\d'
能夠匹配'py3'
;進階
.
能夠匹配任意字符,因此:方法
'py.'
能夠匹配'pyc'
、'pyo'
、'py!'
等等。要匹配變長的字符,在正則表達式中,用*
表示任意個字符(包括0個),用+
表示至少一個字符,用?
表示0個或1個字符,用{n}
表示n個字符,用{n,m}
表示n-m個字符:語言
來看一個複雜的例子:\d{3}\s+\d{3,8}
。mail
咱們來從左到右解讀一下:
\d{3}
表示匹配3個數字,例如'010'
;
\s
能夠匹配一個空格(也包括Tab等空白符),因此\s+
表示至少有一個空格,例如匹配' '
,' '
等;
\d{3,8}
表示3-8個數字,例如'1234567'
。
綜合起來,上面的正則表達式能夠匹配以任意個空格隔開的帶區號的電話號碼。
若是要匹配'010-12345'
這樣的號碼呢?因爲'-'
是特殊字符,在正則表達式中,要用'\'
轉義,因此,上面的正則是\d{3}\-\d{3,8}
。
可是,仍然沒法匹配'010 - 12345'
,由於帶有空格。因此咱們須要更復雜的匹配方式。
要作更精確地匹配,能夠用[]
表示範圍,好比:
[0-9a-zA-Z\_]
能夠匹配一個數字、字母或者下劃線;
[0-9a-zA-Z\_]+
能夠匹配至少由一個數字、字母或者下劃線組成的字符串,好比'a100'
,'0_Z'
,'Py3000'
等等;
[a-zA-Z\_][0-9a-zA-Z\_]*
能夠匹配由字母或下劃線開頭,後接任意個由一個數字、字母或者下劃線組成的字符串,也就是Python合法的變量;
[a-zA-Z\_][0-9a-zA-Z\_]{0, 19}
更精確地限制了變量的長度是1-20個字符(前面1個字符+後面最多19個字符)。
A|B
能夠匹配A或B,因此(P|p)ython
能夠匹配'Python'
或者'python'
。
^
表示行的開頭,^\d
表示必須以數字開頭。
$
表示行的結束,\d$
表示必須以數字結束。
你可能注意到了,py
也能夠匹配'python'
,可是加上^py$
就變成了整行匹配,就只能匹配'py'
了。