2011-05-17 105 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。