2012-11-21 23 views
0

以下正則表達式比較耗時過長(> 2分鐘)。Python正則表達式搜索時間過長

re.search('^(\S+){2,50}/(\S+){2,50}\-trailing/$', 'test-request/this-is-crashing/') 

刪除長度限制({2-50})可解決此問題。

模式中的錯誤是什麼?

ENV:Ubuntu的i5的4GB的Python 2.7.3

+0

您是否嘗試過使用(例如)perl使用相同的正則表達式?無論如何,你確實知道'(\ S +){2,50}'是什麼意思?無論如何,可能是一些回溯優化問題。 – Bakuriu

回答

8
(\S+){2,50} 

你確定你需要這個? \S+表示一次或多次出現。然後你想要2-50次發生?

爲什麼不:

\S{2,50} 
+4

你是對的,這叫做[災難性的回溯](http://www.regular-expressions.info/catastrophic.html) – stema

0

爲什麼不讓它更簡單...

re.match('([^/]+)/([^/]+)-trailing/', 'test-request/this-is-crashing/') 

雖然在這種情況下,未發現任何...

我想您只捕捉類似於此的字符串:

'<SOME-TEXT>/<SOME-TEXT>-trailing/'