C# 正则表达式Regex

C# 正则表达式 正则表达式是一种小型的、高度专业化的编程语言,它被嵌入到C#这样的主语言中。它由普通字符(例如,a到z之间的字母)和特殊字符(称为“元字符”)组成,这些特殊字符包括?()[]等。 阅读详情

正则表达式,使得字符串的操作变得更加方便。

由于正则表达式是用于处理字符串,因此正则的类被放置在System.Text.RegularExpressions中。

使用示例:

1、使用情景:当我们复制一个文件时,文件名会自动在末尾增加一个下标,以避免覆盖原文件。如:info.txt -> info(1).txt

	private static void FileNameModify()
        {
            string filePath = @".\NewFile.txt";
            string pattern = @"\(\d+\)$";

            while (File.Exists(filePath))
            {
                Regex rgx = new Regex(pattern);
                string fileName = Path.GetFileNameWithoutExtension(filePath);

                if (rgx.IsMatch(fileName))
                {
                    Match indexMatch = rgx.Match(fileName);
                    string indexStr = indexMatch.Value;
                    Regex num = new Regex(@"\d+");
                    Match index = num.Match(indexStr);
                    int fileIndex = int.Parse(index.Value);

                    filePath = fileName.Substring(0, fileName.LastIndexOf('(')) + "(" + (++fileIndex) + ")" +
                               Path.GetExtension(filePath);

                }
                else
                {
                    filePath = fileName + "(1)" + Path.GetExtension(filePath);
                }
            }

            using (File.Open(filePath, FileMode.Create))
            {
                ;
            }
        }


下面我们来开始学习正则表达式。

首先在System.Text.RegularExpressions命名空间中,有这几个主要的类:

1、Regex

2、Match、 MatchCollection

3、Group、GroupCollection

4、Capture 、CaptureCollection


首先,我们来整理一下,这几个类之间的关系。那么它们之间的关系是什么样子的呢?

在帮组文档中,我们可以看到:

System.Object

System.Text.RegularExpressions.Regex


System.Object

System.Text.RegularExpressions.Capture

System.Text.RegualrExpressions.Group

System.Text.RegularExpressions.Match


从这里我们就能看出后这几个类之间的关系:Match 是 Group的子类,Group是Capture的子类。知道这个东西有什么用呢?这个有助于我们理解下面的这些东西(个人理解,有错误请指出!)

*当我们使用一个正则表达式去对一段文本进行匹配时,我们可以使用Match去得到最终的匹配结果。但是,有时,我需要用到匹配结果中的一部分子集,这部分子集就会用Group这个东西来保存,而在Group中保存的东西就是Capture。说白了,其实在匹配过程中Capture才是最小单元。


(这里只是简单的正则使用,先理解了用法,然后去考虑正则的构建)

我们来举个例子:

第一步:我只想要得到一个符合条件的字符串。

	private static void Test()
        {
            string myStr = "peeek";
            string pattern = "^pe+k";

            Regex regex = new Regex(pattern);

            if (regex.IsMatch(myStr))
            {
                Match match = regex.Match(myStr);
                Console.WriteLine("Match : " + match.Value);
            }
        }

结果如下:



第二步:但是,我突然还想要得到其中e的情况,怎么办?为正则添加组(Group)。修改成下面的样子。

	private static void Test()
        {
            string myStr = "peeek";
            string pattern = "^p(e)+k";

            Regex regex = new Regex(pattern);

            if (regex.IsMatch(myStr))
            {
                Match match = regex.Match(myStr);
                Console.WriteLine("Match : " + match.Value);

                Console.WriteLine(" Match groups count: " + match.Groups.Count);
            }
        }


结果如下:

好了,我们就能发现,现在出席那了两个组。其中一个组是:peeek  另一个组是:e:它们分别是小括号括起来的部分匹配的字符串和整个正则匹配的字符串。

而我们使用小括号匹配的这部分信息就是我们需要的e的信息。


但是,我们又该怎么样去获得这部分的信息呢?我们知道在group中包含了多个capture信息(即captures:CaptureCollection),所以我们可以通过使用group的capture属性来获得我们需要的东西。(在group的Value属性中存储了最后一个capture信息)

第三步:使用Group中的captures属性获得详细信息

	private static void Test()
        {
            string myStr = "peeek";
            string pattern = "^p(e)+k";

            Regex regex = new Regex(pattern);

            if (regex.IsMatch(myStr))
            {
                Match match = regex.Match(myStr);
                Console.WriteLine("Match : " + match.Value);

                Console.WriteLine(" Match groups count: " + match.Groups.Count);
                for (int i = 0; i < match.Groups.Count; i++)
                {
                    Console.WriteLine("     Groups{0}: {1}", i, match.Groups[i].Value);
                    CaptureCollection cc = match.Groups[i].Captures;
                    Console.WriteLine("     this group has {0} captures", cc.Count);

                    for (int j = 0; j < cc.Count; j++)
                    {
                        Console.WriteLine("         capture {0}: {1}", j, cc[i]);
                    }
                }
            }
        }

结果如下:



*当我们使用一个正则表达式去对一段文本进行匹配时,我们可以使用Match去得到最终的匹配结果。但是,有时,我需要用到匹配结果中的一部分子集,这部分子集就会用Group这个东西来保存,而在Group中保存的东西就是Capture。说白了,其实在匹配过程中Capture才是最小单元。





C#语言的正则表达式 正则表达式(Regular Expressions,简称Regex)是一种强大而灵活的字符串处理工具,它可以用来匹配、搜索和替换文本中的模式。在C#中,正则表达式是一种非常重要的工具,因为它可以帮助我们轻松地处理字符串数据,进行复杂的模式匹配。在本文中,我们将详细探讨C#语言中的正则表达式,包括其基本概念、常用方法、应用示例以及一些最佳实践。 阅读详情

相关推荐

C#正则表达式全面详解:从基础到高级应用

正则表达式是处理文本模式匹配的强大工具,在数据验证、文本提取、格式转换等场景中发挥着重要作用。C# 通过System.Text.RegularExpressions命名空间提供了完整的正则表达式支持,本文将全面介绍 C# 中正则表达式的使用方法,从基础语法到高级特性,帮助开发者掌握这一实用技术。

Amon的专栏 1634

C# 正则表达式(Regex类)

正则表达式是由普通字符(如英文字母)以及特殊字符(也称为元字符)组成的一种文字模式这种文字模式可用于检查字符串的值是否满足一定的规则,例如:验证输入的邮箱是否合法输入的身份证号码是否合法输入的用户名是否满足条件等也可以进行字符串的替换和提取所以,正则表达式可以是单个字符,也可以是更复杂的模式字  符描  述\转义字符,将一个具有特殊功能的字符转义为一个普通字符,或反过来^匹配输入字符串的开始位置$匹配输入字符串的结束位置*匹配前面的零次或多次的子表达式+

qq_57798018的博客 1万+

C# 正则表达式进阶:Regex 类的 7 大用法 & 编译选项全解析

🔥关注墨瑾轩,带你探索编程的奥秘!🚀🔥超萌技术攻略,轻松晋级编程高手🚀🔥技术宝库已备好,就等你来挖掘🚀🔥订阅墨瑾轩,智趣学习不孤单🚀🔥即刻启航,编程之旅更有趣🚀。

java专栏 841

C# Regex 深入正则表达式

C# Regex 深入正则表达式         正则表达式(Regular expressions)是一套语法匹配规则,各种语言,如Perl, .Net和Java都有其对应的共享的正则表达式类库。在.Net中,这个类库叫做Regex。 简单的说,Regex是从字符窗中查找匹配字符串的应用类。通过Regex,编程人员能够非常方便的从一段数据中提取自己所需要的数据信息。举

jyz123456的专栏 987

C#正则表达式之Regex类用法详解

正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串,正则表达式无疑是处理文本最有力的工具,而.NET提供的Regex类实现了验证正则表达式的方法。

YOLOv8模型RKNN量化策略与RK3588部署实战解析

本文详细解析了YOLOv8模型在RK3588平台上的RKNN量化策略与部署实践。通过对比INT8和FP16量化方式的性能差异,结合实际测试数据,为开发者提供了从模型导出、转换到板端部署的完整解决方案,帮助实现高效的边缘AI应用部署。

oil88的博客 1098

【C#进阶三】C#正则表达式的使用及常用案例(Regex.IsMatch、Regex.Match,match.NextMatch、Regex.Matches、Regex.Replace等)(实践篇)

通过调用 Regex 类的静态方法。 方法参数包含输入字符串和正则表达式模式。 正则表达式引擎会缓存静态方法调用中使用的正则表达式,这样一来,重复调用使用同一正则表达式的静态正则表达式方法将提供相对良好的性能。 通过实例化Regex 对象,采用的方式是将一个正则表达式传递给类构造函数。...

QHCV的博客 5967

数据结构实验1.2—高精度计算PI值(西工大)

这是数据结构第二题的题目,是让我们根据用户的需求来计算派的值 这是题目的详细描述,刚看到这道题的时候,我是真的头大,完全没有思路,于是查找了一些大佬的笔记后才开始编写 这是我在写这些代码是所运用到的数学反三角函数幂次展开式的知识。 下面是正确的代码以及我的一些见解,和需要注意的一些地方。希望能对你有所帮助。如有更加精简的算法,请在评论区留下你的算法!!!谢谢!!! #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdl

abcdef0623的博客 5831

C#中使用Regex类来实现正则表达式

https://docs.microsoft.com/zh-cn/dotnet/api/system.text.regularexpressions.regex?view=net-5.0 https://www.runoob.com/csharp/csharp-regular-expressions.html

王王王渣渣的博客 4002

IEEE ACCESS Please note that all author names should be listed in English.(所有作者名需用英文名列出)

很奇怪哈,我明明手稿和提交页面作者都是用的英文,但是为什么还是会提示我没用英文呢?后来给编辑发消息,回的很快,他给我发了一个截图,确实是出现中文,但是我还是不知道为啥会出现中文。直到晚上回寝室洗澡的时候忽然想起来了是不是orcid的原因,因为它会强制作者绑定一个orcid账号,而我的orcid账号的名字刚好是中文的。当然这个只是我的一个猜想,但是我觉得可能性很大。我的第二篇论文已经投稿了快三个月了,效果非常的不好,所以我打算转投IEEE ACCESS了,希望这里可以给我一点好的建议。

kuyecsl的博客 3310

ubuntu-emto-cpa 测试和使用(单核运行)

ubuntu-emto-cpa 测试和使用(单核运行)

qq_45834835的博客 1400

C#正则表达式Regex类的用法

一、C#正则表达式符号模式 字  符 描  述 \ 转义字符,将一个具有特殊功能的字符转义为一个普通字符,或反过来 ^ 匹配输入字符串的开始位置 $ 匹配输入字符串的结束位置 * 匹配前面的零次或多次的子表达式 + 匹配前面的一次或多次的子表达式 ? 匹配前面的零次或一次的子表达式 {n} n是一个非负整数,匹配前面的n次子表达式 {n,} n是一个非负...

2319

【Unity小游戏】整整一个周末写一款《皇室战争 玩法》 的 即时战斗类 游戏Demo。两万多字游戏制作过程+解析

Unity游戏制作,本篇文章介绍了复刻皇室战争玩法的一个自制小游戏,共有该游戏的两万字教程加制作过程,欢迎品尝! 世界上没有绝对的公平,如果我们起点就比别人第一步,那就更需要比别人努力了。

努力前行,总会成为自己心中的那道光 12万+

C#整理——正则表达式和C#中的Regex

1. 正则表达式 什么是正则表达式,在本篇不再赘述。 https://github.com/ziishaned/learn-regex 推荐上述地址,个人认为是一篇很好的介绍和学习正则表达式的文章,简练清楚。 2. C#中的正则表达式 不严格的说,大概涉及到四个类: Regex类 Match类 / MatchCollection类 Group类 /GroupCollection类 Capture类 /CaptureCollection 类 需要说明的是: 第一,它们都在命名空间S...

laiyizhou的专栏 1454

数据分享】中国12.5m数字高程模型(DEM)数据(分省)

数据名称:ALOS 12.5m DEM 数据。数据名称:ALOS 12.5m DEM 数据。数据大小:61.5GB。空间分辨率:12.5m。数据大小:61.5GB。空间分辨率:12.5m。

JData_Engineer的博客 5388

ardupilot 方向余弦矩阵/旋转矩阵的理解

本节主要记录自己对ardupilot中用到的方向余弦矩阵/旋转矩阵的理解,欢迎批评指正,有些资料参考网上写的比较好的资料,免得查找资料麻烦。旋转矩阵的坐标理解:表示从旋转矩阵的下标的坐标系的坐标变换到上标表示的坐标系坐标下。旋转矩阵的坐标系理解:表示从旋转矩阵的上标的坐标系变换到下标表示的坐标系下。从旋转矩阵的投影更好理解,比如下面旋转矩阵的第一行是左边坐标系的第一维分量在右边坐标系的投影。

陌城烟雨 612

c#中regex的命名空间_C#正则表达式Regex类使用

作为文本处理的利器——Perl语言对正则表达式的最强大支持起到了重要的作用,正因为如此,许多其他语言在加入正则表达式引擎的时候都会或多或少的兼顾perl风格的正则表达式,开发出相应的引擎。本人使用perl语言处理文本有一些时间,同时也有几年php开发的经历,像php就有兼容perl的正则表达式引擎,其对应的正则表达式函数就是以p为前缀,如preg_replace、preg_match、preg_s...

weixin_30139213的博客 975

华为面试手撕真题【判断是ipv4还是ipv6地址】

编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址。

MISAYAONE的博客 1万+

C# 正则表达式使用_C# Regex使用整理

一、C# 正则表达式使用整理 常用操作:判断,匹配,替换,切割 在C#中使用正则表达式主要是通过Regex类来实现。命名空间:using System.Text.RegularExpressions。 其中常用方法: 名称 说明 IsMatch(String, String) 指示Regex构造函数中指定的正则表达式在指定的输入字符串中是否找到了匹配项。 Match(String, String) 在指定的输入字符串中搜索Regex构造函数中指定的正则表达式的第一个...

天马3798 2202

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

c#正则表达式学习1-Regex类,RegexOptions及Regex类构造函数

  在c#中使用正则表达式,第一步要引入using System.Text.RegularExpressions命名空间,该空间包括了以下八个类:Regex-----包含了正则表达式,以及使用正则表达式的方法MatchCollection----包含了一个正则表达式找到的所有比配项Match-----包含了一次比配项中所有比配的文本GropCollection---包含了一次比配中所有分组Gr

tianykun的专栏 2336

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C# 中使用正则表达式 Regex.Matches方法的几个应用

用于正则表达式的 Regex.Matches静态方法的几种用法:  //①正则表达式 = > 匹配字符串 string Text = @"This is a book , this is my book , Is not IIS"; //定义一个模式字符串,不仅仅是纯文本,还可以是正则表达式

人在天涯,不倦求索。。 4万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C# REGEX正则表达式(傻瓜式理解)

傻瓜式理解regex正则表达式

m0_67750491的博客 710
上一篇: C# 输出格式化
下一篇: c# 正则表达式 Regular Expression(二)
Rechard0121
博客等级 码龄15年 4粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值