代码之家  ›  专栏  ›  技术社区  ›  Sonny Boy

什么时候应该在String.IndexOf()上使用Regex?或String.Contains()?

  •  2
  • Sonny Boy  · 技术社区  · 15 年前

    我在想,正则表达式是个更好的主意吗?正则表达式在什么时候会比标准字符串比较快?是基于被比较字符串的长度还是基于被比较字符串的数量?

    4 回复  |  直到 13 年前
        1
  •  2
  •   Frederik    15 年前

    它是可变的。比较绩效是输入数据、用于比较的文化、区分大小写和 CompareOptions . 正则表达式对象的实例化成本更高(除非它在 Regex IndexOf() ,但是YMMV。

    请记住,在使用Contains/IndexOf时,运行用户/线程的区域性将决定如何进行比较。这会对绩效产生重大影响。不是所有的文化都这么快。

    不变文化是一种非常快速的文化。如果你使用 CompareInfo String.IndexOf() ,速度会更快一些。

    CultureInfo.InvariantCulture.CompareInfo.IndexOf(..)
    

    要对做出正确的选择有信心,唯一的方法就是基准测试。也就是说,除非你在很多兆字节的字符串中转换,否则对任何人来说都不会有什么影响。正如ChrisF之前所说,在这种情况下,关注可读/可维护的代码。

    下面是一篇关于充分利用regex的好文章: Optimizing Regular Expression Performance

        2
  •  2
  •   ChrisF    15 年前

    如果您的搜索表达式很简单,那么我认为不值得使用正则表达式-无论您在编码和阅读方面有多擅长,当您(或者更重要的是,其他人)在6个月后再次查看代码时,您将需要更多的时间来理解代码。

    如果速度的提高只是微不足道的,那就使用可读性更强、可维护性更强的代码。

        3
  •  1
  •   Michael Burr    15 年前

    我只是猜测,但我怀疑对于简单的子字符串搜索,两种方法在性能上几乎没有差别 String.Contains() , String.IndexOf() 和regex(如果有的话,我猜regex永远不会更快,但可能会慢一点点)。

    您不应该考虑迁移到regex,除非您的需求(或成为)需要匹配比子字符串更复杂的内容。

        4
  •  0
  •   Lee    14 年前