2015-05-15 39 views
0

我正在從公司名稱中刪除法律形式,我的方法是使用正則表達式來匹配法律形式。代碼如下所示:如何讓這個正則表達式代碼更有效率?

syn = [re.sub(r'\b' + form + r'\b', '', name).strip() 
      for form in self.forms 
      if re.search(r'\b' + form + r'\b', name)] 

然而,這是相當緩慢的,因爲有幾百個法律形式。有沒有更好的辦法?

+1

這個問題看起來更適合codereview.stackexchange.com – IanAuld

+0

@IanAuld我該如何遷移? – kutschkem

+0

我相信一個mod需要這樣做 – IanAuld

回答

0

你應該預編譯你的正則表達式,因爲有大量的正則表達式。 Python在默認情況下記憶正則表達式,但您的大數字將超過緩存大小。

另一個選項可能是標記公司字符串,因爲它可能不長。然後檢查每個標記與包含表單的set。然後加入最後的令牌。

self.forms = (...) 
tokens = company.split(' ') 
return ' '.join([ t for t in tokens if t not in self.forms ]) 
+0

這不起作用,法律形式由多個單詞組成,所以在空白處分割不會有幫助。無論如何,由於預編譯正則表達式的竅門,我會接受這個答案。 – kutschkem