2012-09-20 72 views
1

我在學習Python,需要格式化來自IMAP的「From」字段。我嘗試使用str.find()str.strip(),並使用正則表達式。使用find()等,我的函數比re(我定時)要快得多。所以,當最好使用re?有沒有人有任何好的鏈接/相關文章? Python文檔顯然沒有提到...Python:正則表達式vs find(),strip()

回答

10

find只匹配一個確切的字符序列,而正則表達式匹配一個模式。當然,只有尋找一個確切的序列更快(即使你的正則表達式模式也是一個確切的序列,仍然有一些額外的開銷)。

由於上述原因,如果您知道確切的序列,則應該使用find,如果不知道確切的序列,則應該使用正則表達式(或其他)。你應該使用的確切方法確實取決於你面臨的問題的複雜性。

作爲一個方面說明,python re模塊提供了一個compile方法,允許您預編譯正則表達式,如果您要重複使用它。如果您多次使用相同的圖案,這可以顯着提高速度。

+0

謝謝。我注意到兩者之間有一條細線:我會運行'str.find('abb')',然後'str [:str.find('abb')]'...多次修改字符串......它仍然比re更快。我想你真的要花時間去看看這個重新開銷是值得的。 – janeh

+0

我現在嘗試用'compile'進行測試 – janeh

3

如果你打算做一些複雜的事情,你應該使用re。它比使用字符串方法更具可擴展性。

字符串方法適合做簡單而不值得用正則表達式打擾的東西。

所以,這取決於你在做什麼,但通常你應該使用正則表達式,因爲它們更強大。