C#正则表达式快速入门

news/2024/12/16 8:14:49/文章来源:https://www.cnblogs.com/Can-daydayup/p/18608867

前言

正则表达式(Regular Expression)是一个强大的文本处理工具,主要用于字符串的搜索、替换、验证和分割等操作。通过定义特定的模式,正则表达式可以高效地匹配、查找或替换符合该模式的文本内容。今天大姚将和大家一起来快速了解学习正则表达式,并且在C#中快速应用。

正则表达式的优势

与传统方法相比,正则表达式在处理字符串时具有以下显著优势:

  • 灵活性:正则表达式提供了极高的灵活性,能够匹配复杂的文本模式。
  • 高效性:对于大量的文本数据,正则表达式提供了一种快速筛选和处理的方法。
  • 广泛应用:几乎所有的编程语言都支持正则表达式,使得它在跨平台应用中非常有用。

注意事项

  • 正则表达式虽然强大,但是在处理复杂模式或大数据量时可能会比较耗时。因此,在性能敏感的场合要谨慎使用。
  • 复杂的正则表达式可能难以理解和维护。建议在使用时添加必要的注释,并尽量将复杂的模式拆分成多个简单的部分。

常用元字符

元字符是正则表达式中具有特殊意义的字符,以下是一些常用的元字符及其作用:

  • . : 匹配除换行符外的任何单个字符。
  • - :定义一个范围(例如[A-Z])。
  • ^ : 匹配字符串的开始。
  • $ : 匹配字符串的结束。
  • * : 匹配前面的子表达式零次或多次。
  • + : 匹配前面的子表达式一次或多次。
  • ? : 匹配前面的子表达式零次或一次。
  • [] : 匹配括号内的任意一个字符。
  • | : 匹配左右任意一个表达式(或操作)。
  • \ : 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。

验证邮箱地址

        /// <summary>
        /// 验证邮箱地址
        /// </summary>
        public static void VerifyEmailAddress()
        {
            string email = "edwin.doe@qq.com";
            string pattern = @"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$";
            var regex = new Regex(pattern);
            bool isValid = regex.IsMatch(email);
            Console.WriteLine($"{email} is valid email address: {isValid}");
        }

验证手机号码

        /// <summary>
        /// 验证手机号码
        /// </summary>
        public static void VerifyMobilePhone()
        {
            string mobile = "13812345678";
            string pattern = @"^1[3-9]\d{9}$";
            var regex = new Regex(pattern);
            bool isValid = regex.IsMatch(mobile);
            Console.WriteLine($"{mobile} is valid mobile phone number: {isValid}");
        }

提取URL

        /// <summary>
        /// 提取URL
        /// </summary>
        public static void ExtractUrl()
        {
            string url = "https://github.com/YSGStudyHards/DotNetGuide";
            string pattern = @"^https?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+$";
            var regex = new Regex(pattern);
            Match match = regex.Match(url);
            if (match.Success)
            {
                Console.WriteLine($"Found URL: {match.Value}"); //Output:https://github.com/YSGStudyHards/DotNetGuide
            }
            else
            {
                Console.WriteLine("No URL found.");
            }
        }

替换文本

        /// <summary>
        /// 替换文本
        /// </summary>
        public static void ReplaceText()
        {
            string input = "The date is 2024/12/16.";
            string pattern = @"(\d{4})/(\d{2})/(\d{2})";
            string replacement = "$1-$2-$3";
            var regex = new Regex(pattern);
            string result = regex.Replace(input, replacement);
            Console.WriteLine(result);//Output:The date is 2024-12-16.
        }

分割字符串

        /// <summary>
        /// 分割字符串
        /// </summary>
        public static void SplitString()
        {
            string pattern = @"[;,]";
            string input = "apple;banana,orange;grape";
            var regex = new Regex(pattern);
            string[] substrings = regex.Split(input);
            foreach (string substring in substrings)
            {
                Console.WriteLine(substring);
                //Output:
                //apple
                //banana
                //orange
                //grape
            }
        }

C#正则性能提升技巧

使用编译选项

使用 RegexOptions.Compiled 选项可以提高正则表达式的执行性能。此选项会在运行时编译正则表达式,从而加快匹配速度。

string pattern = @"(\d{4})/(\d{2})/(\d{2})";
Regex regex = new Regex(pattern, RegexOptions.Compiled);  

避免过度回溯

复杂的正则表达式可能会导致大量的回溯,从而增加匹配时间。通过优化正则表达式,减少不必要的回溯,可以提高性能。例如,尽量避免使用过多的重复限定符(如 *+?),并使用非贪婪匹配(*?+???)来减少回溯。

// 贪婪匹配  
string pattern = @"<.*>";  
  
// 非贪婪匹配  
string pattern = @"<.*?>";  

合理设置超时时间

为了防止正则表达式在极端情况下耗费过多的时间,可以设置匹配操作的超时时间。

string pattern = @"(\d{4})/(\d{2})/(\d{2})";
TimeSpan timeout = TimeSpan.FromSeconds(1); // 设置1秒的超时时间  
Regex regex = new Regex(pattern, RegexOptions.None, timeout);  

在线正则表达式大全

对于我们而言正则表达式用的不是很频繁,记一下等到用的时候又忘记了。所以我们主要了解一下常用元字符和基本用法,当遇到需要做正则表达式拼接的时候可以到网上查阅现有资料,这里大姚分享一个比较全面的在线正则表达式大全。

  • https://any-rule.vercel.app

DotNetGuide技术社区

  • DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目框架推荐、求职和招聘资讯、以及解决问题的平台。
  • 在DotNetGuide技术社区中,开发者们可以分享自己的技术文章、项目经验、学习心得、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
  • 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台。无论您是初学者还是有丰富经验的开发者,我们都希望能为您提供更多的价值和成长机会。

欢迎加入DotNetGuide技术社区微信交流群👪

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/853600.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用新数据重建旧类,实现无样本的持续学习

用新数据重建旧类,实现无样本的持续学习众所周知,持续学习方法会遭受灾难性遗忘,对于不存储先前任务示例的方法来说,这种现象尤其难以应对。因此,为了减少特征提取器中的潜在漂移,通常在第一个任务明显大于后续任务的情况下评估现有的无样本方法。从较小的第一个任务开始…

转发:《智能汽车传感器:原理设计应用》新书推荐

《智能汽车传感器:原理设计应用》新书推荐 由化学工业出版社资深编辑张海丽老师负责策划编辑。 本书在京东、淘宝天猫、当当网上均有销售 京东:https://search.jd.com/Search?keyword=%E6%99%BA%E8%83%BD%E6%B1%BD%E8%BD%A6%E4%BC%A0%E6%84%9F%E5%99%A8%EF%BC%9A%E5%8E%9F%E…

通过知识提炼增强单视图场景的自监督方法

通过知识提炼增强单视图场景的自监督方法通过运动结构从图像中推断场景几何是计算机视觉中一个长期存在的基本问题。虽然经典方法和最近的深度图预测只关注场景的可见部分,但场景完成的任务旨在推理即使在遮挡区域中的几何形状。随着神经辐射效应(NeRF)的普及,隐式表示也通…

【bWAPP靶场】OS Command lnjection - Blind

命令盲注就是注入后没有返回信息,要根据反应时间判断命令是否成功执行 输入127.0.0.1输入 ||whoami `sleep 5 `

【bWAPP靶场】OS Command Injection

Level:low payload:www.nsa.gov;whoami原理:在DNS查询之后再执行dir命令 Level:medium 查看源码commandi_check_1是把&和;替换了,还可以使用| 构造payload:www.nsa.gov| whoamiLevel:high 查看源码escapeshellcmd()函数用来跳过字符串中的特殊符号,防止恶意用户通过…

【Windows安全】Windows文件关联深度解析:原理、应用与修复

在Windows操作系统中,文件关联是一项至关重要的功能,它决定了当用户双击一个文件时,哪个应用程序会被用来打开这个文件。文件关联机制通过将文件扩展名与特定的应用程序建立起一种依存关系,使得用户无需每次都手动选择打开文件的程序,从而提高了操作效率。本文将深入探讨W…

综合设计——多源异构数据采集与融合应用综合实践——个人总结

这个项目属于哪个课程 2024数据采集与融合技术实践组名、项目简介 组名:scrapy能帮我爬到美味蟹黄堡的秘方吗项目需求:文物不能很好的融入我们的生活,它们仿佛一具冰冷的尸体躺在博物馆的展示柜中,静静地接受着岁月的侵蚀和尘埃的覆盖。项目目标:赋予文物新的生命力,让它…

第 3 单元:微分:复合函数、隐函数和反函数 (链式法则、复合函数)

链式法则 常见的链式法则误解 例子: 例子: 识别复合函数 例子: 例子:利用链式法则求 cos(x) 的导数 例子:利用链式法则求 √(3x-x) 的导数 例子:利用链式法则求 ln(√x) 的导数 例子:

KubeWall:一款现代化的 Kubernetes 集群管理工具

以下文章来源于Github爱好者 ,作者KubeWall KubeWall 是一款功能强大的 Kubernetes 多集群管理工具,采用单一二进制文件的简便部署方式,为用户提供直观且易用的 Web 界面,用于高效管理和监控 Kubernetes 集群。为什么选择 KubeWall? KubeWall 致力于简化 Kubernetes 集群的…

【HW系列+技战法】网络监控告警及多角度资产安全加固技战法

一、技战法概述 随着公司的生产业务和网络不断增加建设,企业和组织面临着越来越多的设备、系统。关键节点设备是否采用冗余架构部署,是否存在设备单点故障风险,遭受网络攻击时是否可以及时进行响应等,它们是保障公司运行稳定性和连续性的重要课题。同时,我们还需要对关键设…

多源异构数据采集与融合应用综合实践

综合设计——多源异构数据采集与融合应用综合实践 Recomind荐宝这个作业属于哪个课程 首页 - 2024数据采集与融合技术实践 - 福州大学 - 班级博客 - 博客园组名、项目介绍 组名:超级无迪爬虫高手元始天尊暴龙战士 Recomind荐宝是一款创新型的购物推荐网站,它整合了多源异构数…