RegEx vs字符串操作函数:什么是更好的

时间:2011-02-09 22:21:49

标签: c# regex

如果我必须找到一个句子中的单词,我可以想到两种方法

  1. 使用string.IndexOf
  2. 使用Regex
  3. 哪一个在性能或最佳实践方面更好

4 个答案:

答案 0 :(得分:6)

如果在没有正则表达式的情况下做某事非常简单,那么这种方式几乎总是更便宜。 String.IndexOf(或String.Contains肯定是的一个例子。

答案 1 :(得分:3)

这取决于您的确切要求。如果你确实需要在一个句子中找到一个单词(而不是一个子字符串),那么我相信使用一个名字很好的正则表达式模式可以比使用IndexOf加上所有额外的更简洁和更明确地表达确保你真正得到一个完整的单词的逻辑。

另一方面,如果您只是在寻找子字符串,那么IndexOf在性能和可读性方面要优越得多。

答案 2 :(得分:3)

这绝不是最科学的测量方法,但这里有一些源代码表明(在非常具体的约束条件下)正则表达式比indexof慢大约4倍。

class Program
{
private const string Sentence = "The quick brown fox jumps over the lazy dog";
private const string Word = "jumps";

static void Main(string[] args)
{
    var indexTimes = new List<long>();
    var regexTimes = new List<long>();
    var timer = new Stopwatch();

    for (int i = 0; i < 1000; i++)
    {
        timer.Reset();
        timer.Start();
        Sentence.IndexOf(Word);
        timer.Stop();
        indexTimes.Add(timer.ElapsedTicks);
    }

    Console.WriteLine(indexTimes.Average());

    for (int i = 0; i < 1000; i++)
    {
        timer.Reset();
        timer.Start();
        Regex.Match(Sentence, Word);
        timer.Stop();
        regexTimes.Add(timer.ElapsedTicks);
    }

    Console.WriteLine(regexTimes.Average());

    Console.ReadLine();
}
}

答案 3 :(得分:2)

就最佳实践而言,string.IndexOf对于阅读代码的人来说可能更为明显。一旦他们看到正则表达式,人们的大脑往往会关闭,所以像IndexOf那样直截了当会让他们的大脑保持开放。

至于性能,这取决于很多事情,只能通过特定代码的基准测试来正确回答。