八卦阵 发表于 2024-5-16 23:21:06

C#正则表达式性能优化:[0-9] vs. \d,轻松提升匹配效率

https://p3-sign.toutiaoimg.com/tos-cn-i-axegupay5k/190043a1d49b4aec8ec2fb6d34874a5b~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1713394016&x-signature=r433tP8BtzgSHCVBwP6xzhicxuM%3D 
概述:在C#中,正则表达式`\d`相对于``可能效率稍低,因为`\d`包含更广泛的Unicode数字字符。为提高性能,可使用``并结合编译优化。以下示例演示性能测试及优化,适用于提高正则表达式匹配效率的场景。
在C#中,正则表达式\d涵盖更广泛的 Unicode 数字字符范围,而明白指定了 ASCII 数字字符范围,因此\d可能略显低效。为提高性能,可使用并结合一些优化技巧。
以下是具体的示例源代码:
using System;
using System.Diagnostics;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
      // 测试性能:使用 \d
      TestPerformance("\\d");

      // 测试性能:使用
      TestPerformance("");
    }

    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} 毫秒");
    }
}看运行结果:
https://p3-sign.toutiaoimg.com/tos-cn-i-6w9my0ksvp/6b71ca0519b740d69e9fba9c789066b8~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1713394016&x-signature=InkJlEFO1pTqTabaB8Mu5HbGkZY%3D 
这个示例中,我们在TestPerformance方法中,使用RegexOptions.Compiled启用正则表达式的编译优化,以提高性能。同时,我们测试了使用\d和两种正则表达式的性能。
在实际应用中,除了使用和编译优化外,还可以根据具体需求思量其他优化策略,如避免过分使用正则表达式、使用非贪婪匹配等。性能优化需根据具体情况进行,适度而行。
代码:https://pan.baidu.com/s/1DT_l5r57RaHOzTDmWzsCkg?pwd=6666 
 
 
https://img2024.cnblogs.com/blog/2113279/202404/2113279-20240411065041365-41120600.gif


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: C#正则表达式性能优化:[0-9] vs. \d,轻松提升匹配效率