# 本文對正則知識不做詳細解釋,僅作入門級的正則知識目錄。 正則表達式的強大早有耳聞,大一時參加一次選拔考試,題目就是用做個HTML解析器,正則的優勢表現得淋漓盡致。題外話不多講,直接上乾貨: 1. 元字元: 與之對應的還有反義字元,大部分為小寫字母變大寫,例如\D表示匹配非數字的字元。 2. 重覆 ...
# 本文對正則知識不做詳細解釋,僅作入門級的正則知識目錄。
正則表達式的強大早有耳聞,大一時參加一次選拔考試,題目就是用做個HTML解析器,正則的優勢表現得淋漓盡致。題外話不多講,直接上乾貨:
1. 元字元:
與之對應的還有反義字元,大部分為小寫字母變大寫,例如\D表示匹配非數字的字元。
2. 重覆(即匹配變長的字元串):
元字元可匹配單一的字元類型,若想匹配長度未知或長度限定的字元串需要在後邊加上限定符。
3. 範圍與分組:
有時元字元並不能滿足匹配字元的需求,這時就需要[]來圈定匹配範圍,例如要匹配一個只帶有a,s,d,f的單詞,可以用\b[asdf]\b;正則裡面還有小括弧用來表示分組,比如你想重覆某幾個字元,就可以使用分組,例如(\d.\d){1,3}表示匹配小括弧里的重覆內容一到三次。此外,小括弧還可以用來後向引用等,此處不記。
4. 零寬斷言:
零寬斷言主要用來查找在某些斷言(指定內容)之前或之後的內容,例如(?=exp)匹配表達式exp前面出現的內容(不匹配exp),(?<=exp)匹配表達式exp後面出現的內容,還有負向零寬斷言等此處不記。
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)
……表示第1、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一起講,只是稍微短了一點。