C#正規表示式效能最佳化:[0-9] vs. d,輕鬆提升匹配效率

架构师老卢發表於2024-04-11
C#正規表示式效能最佳化:[0-9] vs. d,輕鬆提升匹配效率

概述:在C#中,正規表示式`\d`相對於`[0-9]`可能效率稍低,因為`\d`包含更廣泛的Unicode數字字元。為提高效能,可使用`[0-9]`並結合編譯最佳化。以下示例演示效能測試及最佳化,適用於提高正規表示式匹配效率的場景。

在C#中,正規表示式\d涵蓋更廣泛的 Unicode 數字字元範圍,而[0-9]明確指定了 ASCII 數字字元範圍,因此\d可能略顯低效。為提高效能,可使用[0-9]並結合一些最佳化技巧。

以下是具體的示例原始碼:

using System;
using System.Diagnostics;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        // 測試效能:使用 \d
        TestPerformance("\\d");

        // 測試效能:使用 [0-9]
        TestPerformance("[0-9]");
    }

    static void TestPerformance(string pattern)
    {
        // 重複匹配次數
        int repeatCount = 1000000;

        // 要匹配的字串
        string input = "1234567890";

        // 建立正規表示式物件,啟用編譯最佳化
        Regex regex = new Regex(pattern, RegexOptions.Compiled);

        // 計時開始
        Stopwatch stopwatch = Stopwatch.StartNew();

        // 執行多次匹配
        for (int i = 0; i < repeatCount; i++)
        {
            regex.IsMatch(input);
        }

        // 計時結束
        stopwatch.Stop();

        // 輸出結果
        Console.WriteLine($"使用正規表示式 {pattern} 進行 {repeatCount} 次匹配的耗時:{stopwatch.ElapsedMilliseconds} 毫秒");
    }
}

看執行效果:

C#正規表示式效能最佳化:[0-9] vs. d,輕鬆提升匹配效率

這個示例中,我們在TestPerformance方法中,使用RegexOptions.Compiled啟用正規表示式的編譯最佳化,以提高效能。同時,我們測試了使用\d[0-9]兩種正規表示式的效能。

在實際應用中,除了使用[0-9]和編譯最佳化外,還可以根據具體需求考慮其他最佳化策略,如避免過度使用正規表示式、使用非貪婪匹配等。效能最佳化需根據具體情況進行,適度而行。

程式碼:https://pan.baidu.com/s/1DT_l5r57RaHOzTDmWzsCkg?pwd=6666

相關文章