2011-05-17 88 views
0

我需要優化下面的reg exp,以便它執行得更快。誰能幫忙?Reg Exp優化

([\d\w]{15}[\x01]\d{12}[\x01]\d{2}(.){6}((13((0[0-9]|([1-4][0-9])|5[0-9]))|14((0[0-9]|([1-2][0-9])|30)))[0-5][0-9])801(?:.*)) 

感謝

+5

如果您發佈了它應該做的事情,這將有所幫助。 – Mr47 2011-05-17 13:30:59

+0

也許你應該發佈一些你正在使用的代碼。 – jjnguy 2011-05-17 13:35:49

+1

我認爲從優化正則表達式得到的任何速度都是最小的,如果有的話。你確定你的正則表達式有一個瓶頸嗎? – Dve 2011-05-17 13:47:51

回答

0

不知道你想要什麼你的正則表達式來做到這一點很難優化它,但你可以嘗試通過RegexOptions.Compiled的正則表達式構造。構建正則表達式對象需要更長的時間,但這意味着它會更快地執行搜索。

+1

'RegexOptions.Compiled'不是萬能的。取決於如何使用正則表達式,這可能會使性能變得更糟。 – 2011-05-17 21:46:38

3

這是一個優化的版本:除去大量的冗餘字符類和基團。最終,知道正則表達式應該做什麼會更好。

\w{15}\x01\d{12}\x01\d{2}.{6}(13[0-5]\d|14([0-2]\d|30))[0-5]\d801.* 

編輯:根據你的新的信息,您可以進一步降低它歸結爲:

\w{15}\x01\d{12}\x01\d{2}.{6}(13[0-5]\d|1400)[0-5]\d801.* 
0

的REG EXP搜索文本文件中誰具有以下格式和值的記錄:

記錄應與15個數字或文字,後面緊跟着12位和[\x01]又一個特殊字符[\x01],其次是2個位數任何6個字符開始,然後查找值(日期值格式小時分秒無覆蓋ut分隔文件中的小時和分鐘和秒)的任何​​:.)在130000和140059之間(這是下面提取的reg exp I的部分),最後是值801和可能隨後的任意數量的字符。

((13((0[0-9]|([1-4][0-9])|5[0-9]))|14((0[0-9]|([1-2][0-9])|30)))[0-5][0-9]) 

希望我在這裏已經很清楚,可以理解。

而且我在REG exp的開始和$爲最終加了^。

我用RegexOptions.Compiled選項,以及,但沒有太大的起色。對於所有的提示

謝謝,我會嘗試出來。與此同時,如果您有任何更多優化建議,非常歡迎。

+0

你確定它達到140059?它似乎上升到142959 ... – bluepnume 2011-05-19 07:52:29

+0

無論如何,編輯我的帖子上面的數字高達140059 – bluepnume 2011-05-19 13:36:09

0

對不起,我的部分有錯誤 時間部分在130000和143059之間 我會試試你的解決方案,bluepnume。