簡體   English   中英

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

[英]RegEx vs string manipulation functions: What is better

如果我必須找到一個句子中的單詞,我可以想到兩種方法

  1. 使用string.IndexOf
  2. 使用正則表達式

在性能或最佳實踐方面哪一個更好

如果在沒有正則表達式的情況下做一些事情相當簡單,那么這種方式幾乎總是更便宜。 String.IndexOf (或String.Contains絕對是一個例子。

這取決於您的確切要求。 如果你確實需要在一個句子中找到一個單詞 (而不是一個子字符串),那么我相信使用一個名字很好的正則表達式模式可以更簡潔,更明確地表達,而不是使用IndexOf加上所有額外的邏輯來確保你是實際上得到一個完整的單詞。

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

這絕不是最科學的測量方法,但這里有一些源代碼表明(在非常具體的約束下)正則表達式比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();
}
}

就最佳實踐而言,對於閱讀代碼的人來說, string.IndexOf可能更為明顯。 一旦他們看到正則表達式,人們的大腦往往會關閉,所以像IndexOf這樣直接的東西會讓他們的大腦保持開放狀態。

至於性能,這取決於很多事情,只能通過特定代碼的基准測試來正確回答。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM