# 本文對正則知識不作詳細解釋,僅做入門級的正則知識目錄。html
正則表達式的強大早有耳聞,大一時參加一次選拔考試,題目就是用作個HTML解析器,正則的優點表現得淋漓盡致。題外話很少講,直接上乾貨:python
1. 元字符:正則表達式
與之對應的還有反義字符,大部分爲小寫字母變大寫,例如\D表示匹配非數字的字符。學習
2. 重複(即匹配變長的字符串):spa
元字符可匹配單一的字符類型,若想匹配長度未知或長度限定的字符串須要在後邊加上限定符。.net
3. 範圍與分組:code
有時元字符並不能知足匹配字符的需求,這時就須要[]來圈定匹配範圍,例如要匹配一個只帶有a,s,d,f的單詞,能夠用\b[asdf]\b;正則裏面還有小括號用來表示分組,好比你想重複某幾個字符,就可使用分組,例如(\d.\d){1,3}表示匹配小括號裏的重複內容一到三次。此外,小括號還能夠用來後向引用等,此處不記。htm
4. 零寬斷言:對象
零寬斷言主要用來查找在某些斷言(指定內容)以前或以後的內容,例如(?=exp)匹配表達式exp前面出現的內容(不匹配exp),(?<=exp)匹配表達式exp後面出現的內容,還有負向零寬斷言等此處不記。blog
5. 貪婪與懶惰:
當正則表達式中包含能接受重複的限定符時,一般的行爲是(在使整個表達式能獲得匹配的前提下)匹配儘量多的字符,即貪婪匹配。如表達式a.*b,搜索aabab的話,它會匹配整個字符串aabab。而懶惰匹配會匹配儘量少的字符串,只須要在限定符後面加一個?,例如a.*?b會匹配aab(第一到第三個字符)和ab(第四到第五個字符)。
6. Python的re模塊:
python 提供re模塊,提供正則的全部功能。下面只記兩個方法和一個注意的地方。
6.1 match方法:
match()
方法判斷是否匹配,若是匹配成功,返回一個Match
對象,不然返回None
。
1 >>> import re 2 >>> re.match(r'^\d{3}\-\d{3,8}$', '010-12345') 3 <_sre.SRE_Match object at 0x1026e18b8> 4 >>> re.match(r'^\d{3}\-\d{3,8}$', '010 12345') 5 >>>
若是正則表達式中定義了組,就能夠在Match
對象上用group()
方法提取出子串來。注意到group(0)
永遠是原始字符串,group(1)
、group(2)
……表示第一、二、……個子串。使用groups()方法還能夠獲得全部子串。
6.2 split方法:
split()方法可切分子串,以下:
1 >>> re.split(r'[\s\,\;]+', 'a,b;; c d') 2 ['a', 'b', 'c', 'd']
6.3 關於轉義字符:
python轉義字符串也用\表示,因此正則表達式讀取時做爲字符串出現時會被編譯器自動去掉轉移字符的\,正則使用時就會出錯,因此推薦使用python的 r 前綴。
ps:
本文是對正則表達式的學習總結,大部分知識來源於網上。下面給出兩個我的認爲比較好的連接:
1.http://www.jb51.net/tools/zhengze.html 對正則表達式介紹的比較詳細,我的認爲要想深刻學習正則表達式仍是買本書比較好。
2.http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832260566c26442c671fa489ebc6fe85badda25cd000 來自廖雪峯大神的教程,結合python一塊兒講,只是稍微短了一點。