模塊級函數

你不必定要產生一個 RegexObject 對象而後再調用它的方法;re 模塊也提供了頂級函數調用如 match()、search()、sub() 等等。這些函數使用 RE 字符串做爲第一個參數,然後面的參數則與相應 RegexObject 的方法參數相同,返回則要麼是 None 要麼就是一個 MatchObject 的實例。python

#!python
>>> print re.match(r'From\s+', 'Fromage amk')
None
>>> re.match(r'From\s+', 'From amk Thu May 14 19:12:10 1998')
<re.MatchObject instance at 80c5978>

Under the hood, 這些函數簡單地產生一個 RegexOject 並在其上調用相應的方法。它們也在緩存裏保存編譯後的對象,所以在未來調用用到相同 RE 時就會更快。正則表達式

你將使用這些模塊級函數,仍是先獲得一個 RegexObject 再調用它的方法呢?如何選擇依賴於怎樣用 RE 更有效率以及你我的編碼風格。若是一個 RE 在代碼中只作用一次的話,那麼模塊級函數也許更方便。若是程序包含不少的正則表達式,或在多處複用同一個的話,那麼將所有定義放在一塊兒,在一段代碼中提早編譯全部的 REs 更有用。從標準庫中看一個例子,這是從 xmllib.py 文件中提取出來的:緩存

#!python
ref = re.compile( ... )
entityref = re.compile( ... )
charref = re.compile( ... )
starttagopen = re.compile( ... )
相關文章
相關標籤/搜索