多Regex.Replace或或操作模式?

再一个正则表达式的问题。

更重要的是有效的? 级联很多Regex.Replace与每一个特定的图案来搜索或只有一个Regex.Replace与或运算模式(样式1 | PATTERN2 | ...)?

在此先感谢,法比安

--------------解决方案-------------

这取决于有多大你的文字有多少场比赛,你的期望。 如果可能的话,把一个文本文字或锚(例如^)在正则表达式的前面。 在.NET正则表达式引擎优化这一点,以便它搜索使用快速博耶-Moore算法(可以跳过字符)的文本而不是一个标准的IndexOf,着眼于每一个字符。 在您与在前面的文字文本几种模式的情况下,有一个优化,以创建一组的开端人物。 所有的人都迅速地被忽略。

一般情况下,你可能要考虑阅读精通正则表达式,突出总体优化,以获得一个想法更好的性能(特别是第6章)。

我说,如果你把一切都在一个正则表达式,你可能会得到更快的PERF的,但把第一个最可能的选择,其次是第二个最有可能的,等一件事需要注意的是回溯。 如果你做这样的事情

".*"

匹配带引号的字符串,意识到,一旦它发现的第一个“,那么它会一直去到线,由默认的结束,然后开始备份,直到找到另一个”。

在精通正则表达式的书大量进入如何避免这种情况。

我的回答很烂,但是:这要看情况。 你有多少? 请问几毫秒保存真正发挥作用? 哪种解决方案是最可读的,最简单的维护,扩展能力最强的?

请尝试以下两种方法你手边的具体要求,你会看到。 你可能会惊讶。

完全取决于模式和实现逻辑 - 如果简单的(我想大多数现实世界的情况下会)的正则表达式会更快,如果复杂的多个操作可能是,但标杆管理是答案,如果它是一种情况,这其实很重要。

否则,它会比较靠得这么近你不应该关心,过早的优化和所有。

我很惊讶,你的基准测试表明采用多个独立的表达是更快,我很好奇,看看您所使用的正则表达式的例子。 基本的正则表达式(即无先进的功能,如回溯)可以被编译为“有限状态机”,其速度为O(n)相对于字符串的长度被搜索,而无关的图形的长度。 所以,运行10个不同的正则表达式应该平均需要比一个正则表达式相结合的方式与更长的10倍“|”。

(我知道这是三月一个老问题,但我无法抗拒加入我的2美分:)

分类:C# 时间:2012-03-20 人气:0
本文关键词: C#中,正则表达式
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.124 (s). 10 q(s)