以下正則表達式比較耗時過長(> 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
以下正則表達式比較耗時過長(> 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
(\S+){2,50}
你確定你需要這個? \S+
表示一次或多次出現。然後你想要2-50次發生?
爲什麼不:
\S{2,50}
你是對的,這叫做[災難性的回溯](http://www.regular-expressions.info/catastrophic.html) – stema
爲什麼不讓它更簡單...
re.match('([^/]+)/([^/]+)-trailing/', 'test-request/this-is-crashing/')
雖然在這種情況下,未發現任何...
我想您只捕捉類似於此的字符串:
'<SOME-TEXT>/<SOME-TEXT>-trailing/'
您是否嘗試過使用(例如)perl使用相同的正則表達式?無論如何,你確實知道'(\ S +){2,50}'是什麼意思?無論如何,可能是一些回溯優化問題。 – Bakuriu