你不必定要產生一個 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( ... )