lluxury 发表于 2011-5-3 13:54:25

各位大牛们,好坏分享下思路吧,不要解决了问题,大牛一脸成就感,楼主拿着去找上级涨工资,吾等小民对着像乱码的一行行语句发呆...毕竟读别人的语句,有时候比自己写还难,麻烦稍微给点注释

netbean 发表于 2011-5-3 17:31:32

本帖最后由 netbean 于 2011-5-3 19:22 编辑

呵呵,我下了三本书正在学习:
Mastering Regular Expressions(精通正则表达式 第三版)
[正则表达式经典实例].(美)高瓦特斯,(美)利维森
[正则表达式入门经典].(美)瓦特

测试了新代码,速度恢复了,谢谢:
1672/1725/1638ms-原始文本,by easefull v0.2.0 Beta
3461/2900/2663/2660ms-原始文本,by easefull v0.3.0 Beta
1652/1648/1691/1698ms-原始文本,by easefull v0.3.1 Beta

看似杂乱无章的文本在短短一秒多钟瘦身到不足百分之7,深深感受到正则表达式的强大。非常感谢大家帮忙!

xyhqqaa 发表于 2011-5-3 23:07:58

学下下 。。。。。。。。。。。。。

netbean 发表于 2011-5-4 06:45:31

初学者来分析下思路,请指正:
最初,面对复杂的格式采用一次匹配,不成功;
easefull用两次匹配,有点小问题;
kevinch用两次匹配+字典,成功了;
love5173用16进制,先替换了所有的\x00空字符,再匹配,成功;
easefull实验二进制替换;
3mile直接把所有的\x00替换了再用两次匹配,提高效率;
love5173替换了\x00,一次匹配,提高了速度;
easefull用二进制+两次匹配,更快了。
(\x00是16进制空字符,为什么要先替换?)
(为什么2进制更快?)

easefull 发表于 2011-5-4 12:45:56

本帖最后由 easefull 于 2011-5-4 12:47 编辑

这贴子里面的难点在于Chr(0x00)这个字符在正则里面的归属问题.
这个字符有几个特性:
1.在记事本里面打开是显示为空格
2.用msgbox显示字符串,遇到这个字符时,会认为字符串已结束.后面的字符将不会显示.这很影响正则的测试.
3.在正则里面,这个字符不属于\s,似乎也不属于\h和\H,所以之前的匹配都是要先把这个替换掉.

而二进制的匹配(其实准确的说应该是2进制读文件,16进制匹配.只是谁来告诉我,为什么读的是二进制,用的却是16进制匹配?)
虽然正则表达式更复杂了,但省略了把这个字符匹配出来了替换的步骤.
现在想想,似乎也可以使用\x0来匹配这个字符,这样子在ASNI读取方式下,应该也可以省掉替换字符串的步骤.

另外,kevinch的字典方式也是一个亮点,膜拜之

netbean 发表于 2011-5-4 13:27:45

发现用记事本打开再保存的文本,与替换空字符的文本,内容、大小一致,看来记事本会自动替换空字符。

yarsye 发表于 2011-5-4 15:09:46

对股票比较感兴趣 ,对正则不太懂
页: 1 2 3 4 [5]
查看完整版本: 文本减肥:正则[已解决]