delphi没有内置正则模块所以我们在delphi中使用正则只能借助三方组件了 因为一个产品中需要频繁使用正则替换所以写了一个测试程序,用来比较到底哪种正组件效率最高 相信很多人都知道TPerlRegEx吧?他是免费开源的 这个组件使用的人比较多,然而这个组件却是速度最慢,效率最差的一个 可能是在d2009中的性能比较差吧,别的版本没有试过 TPerlRegEx的一些用法可以看看这里http://www.cnblogs.com/del/archive/2007/12/21/1009482.html 另外一个组件是TRegExpr这个组件总体来说速度还算可以,功能还算比较全,推荐使用,也是免费开源的 而也有一些人使用的是Ms 的RegExp组件,但这个组件需要在delphi注册控件,而且在程序里一直会使用别人的dll感觉很别扭,不过总体来说ms的正则组件性能是相对高的了,但他功能也不是很全,比如他不支持根据匹配结果的条件替换,如果你对软件的性能要求高又不想花钱,那么建议你使用他 另外一个就是商业软件了,他的性能与功能都是没得说的,从各方面测试他都是最高效的 我写的测试程序中因为使用了回调机制的Replace所以看上去他没有ms的regexp速度快,但如果也使用Replace全部的话那速度会比ms的regexp快那么一点 另外因为篇幅有限就直接给大家下载源码了 TPerlRegEx:http://www.regular-expressions.info/download/TPerlRegEx.zip TRegExpr:http://regexpstudio.com/TRegExpr/TRegExpr.html DIRegEx:http://www.yunqa.de/delphi/doku.php/products/regex/index?DokuWiki=564g8fvcqg5lkso0fbcncv86c1 测试源码:http://www.17benteng.com/soft/delphi_RegEx_Test.rar 注意:些测试中的TRegExpr是我修改过的,不过不影响正常使用
解决方案 »
- 工资软件中,我用的是EhGrid直接打印工资表,现在客户需要求合计,请问如何实现?各位老师帮帮忙,客户催的急,分不够再加,小弟在此拜谢
- 大家都来谈自己的感受或想法,升星,散分!
- 两个RichEdit,把一个中的一行的格式包括大小,颜色全一样保存到另一个中
- 怎么计算combobox的下拉菜单的项目个数
- 在线等待
- 如何在vcl里边设置断点
- oracle数据导入到access时出现的麻烦!
- 如何把DELPHIDE 的CAPTION栏作大一些?
- 为了防止开发的软件非法COPY,需要在机器上插个软件狗,请问在DELPHI中怎么读那个端口?谢谢!!!
- 我想在DBGRID的ONKEYDOWN或ONKEYPRESS事件中实现功能组合键的功能,怎么实现?
- 关于打印
- 用户null登陆失败,未与信任sqlserver连接相关联
但是D2009無法編譯
怎么替换无效呢?string s = "某某的面积是12345678平方米";
string t = Regex.Replace(s, @"(?<=\d)(?=(\d\d\d)+(?!\d))", ",");
Console.WriteLine(t); //输出:某某的面积是12,345,678平方米转换为Delphiprocedure TForm3.btnPostClick(Sender: TObject);
var
reg: TPerlRegEx;
begin
reg := TPerlRegEx.Create();
reg.Subject := mmoStr.Lines.Text;//输入 某某的面积是12345678平方米
reg.RegEx := mmoRegex.Lines.Text;//输入 (?<=\d)(?=(\d\d\d)+(?!\d))
reg.Replacement := ',';
reg.ReplaceAll;
mmoResult.Lines.text:= reg.Subject; //输出结果仍然是 某某的面积是12345678平方米
end;