C#正则表达式(Regex类)用法实例总结

2022-11-13 14:11:08 实例 正则表达式 用法

前言

最近学是C#的窗口应用开发编程,然后我在网站搜了一个早上,结果大多数是有一些基础的才看得懂,像对与我这个小白,看了半天都看不懂

最后,还是请教了大神,把我教会了

下面就我对C#的正则表达式的一些总结,第一次写博客,哈哈哈哈,写的不好请见谅,各位大佬们,爱你们。

1.正则表达式的概念

什么是正则表达式?

英文Regular Expression,是计算机科学的一一个 重要概念,她使用一种数学算法来解决计算机程序中的文本检索,匹配等问题,正则表达式语言是一种专门用于字符串处理的语言。在很多语言中都提供了对它的支持,C#也不例外,它可以帮我们解决下面的问题:例如账号、密码的验证等等、

1.1正则表达式的组成

正则表达式就是由普通字符以及特殊字符(成为元字符)组成的文字模式。该模式描述在查找文字

1.1.1元字符是什么

所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。

1.1.2定位元字符

字符 说明

  • \b 匹配单词的开始或结束.
  • \B 匹配非单词的开始或结束
  • ^匹配必须出现在字符串的开头或行的开头
  • $匹配必须出现在以下位置: 字符串结尾、字符串结尾处的\n之前或行的结尾。
  • \A 指定匹配必须出 现在字符串的开头(忽略 Mutiline 选项)。
  • \z指定匹配必 须出现在字符串的结尾(忽略 Multiline选项)。
  • \z指定匹配必须出现在字符串的结尾或字符串结尾处的\n之前(忽略Multilie选项)。
  • \G 指定匹配必须出现在上- -个匹配结束的地方。与Match.NextMatch() -起使用时,此断言确保所有匹配都是连续的。

1.2三个括号?

在正则表达式中有3种类型的括号

他们分别是:方括号、花括号、圆括号、(简称方花园)?

方括号“[“和花括号“{“●

方括号"[“内是需要匹配的字符,

花括号”{"内是指定匹配字符的数量。

圆括号“(“ :表示用来分组的。

插入符号“入”:表示正则式的开始

美元符号“$” :表示正则式的结束

1.3简化正则表达式

实际命令快捷命令
[0-9](数字)d
[a-z][0-9][_](数字、字母、下划线)W
0次或多次发生*
至少一次发生+
0次或1次发生?

1.4@符号的作用

我们经常在正则表达式字符串上加@字符,目的就是为了,不让编译器去解析其中的转义字符,,而作为正则表达式语法(元字符)存在。

在这里插入代码片

1.5正则表达式可以实现四种功能:

因为我看到其他博客说C#有很多方法可以用正则表达式,然后下面的一些例子,都用的是我认为,比较简单的方法。大神勿喷,┗|`O′|┛ 嗷~~

温馨提示:要运用下面的一些语句的要引入

using System.Text.RegularExpressions的命名空间

1,获取:通过正则表达式,从字符串中获取我们想要的部分

Regex reg = new Regex("[0-9]*");//这是搜索匹配0-9的数字
Console.WriteLine(reg.Match("12asda"));//最后提取出了12成功,嘻嘻

2,匹配:判断给定的字符中是否符合正则表达式的过滤逻辑 你可以认为正则表达式表述了一个字符串的书写规则

在这里的就得用从开头到结尾都为的数字为True,出现一个不为数字输出False
Regex reg = new Regex("^[0-9]*$");//判断整个字符串是否都为数字
Console.WriteLine(reg.IsMatch("12asda"));//最后输出False
Console.WriteLine(reg.IsMatch("124536346"));//最后输出True

3, 分割

1、用字符串分隔: 
using System.Text.RegularExpressions;
string str="aaajsbbbjsccc";
string[] sArray=Regex.Split(str,"js",RegexOptions.IgnoreCase);
foreach (string i in sArray) Response.Write(i.ToString() + "<br>");


输出结果:
aaa
bbb
ccc
2、用多个字符来分隔:
string str="aaajbbbscccjDDDseee"; 
string[] sArray=str.Split(new char[2] {'j','s'}); 
foreach(string i in sArray) Response.Write(i.ToString() + "<br>"); 
输出结果:
aaa
bbb
ccc
ddd
eee
3、用单个字符来分隔:
string str="aaajbbbjccc";
string[] sArray=str.Split('j');
foreach(string i in sArray) Response.Write(i.ToString() + "<br>");
输出结果:
aaa
bbb
ccc

4, 替换

string s = "aaa12342525";
Regex r = new Regex("[0-9]");//正则表达式规则
Console.WriteLine(r);//这个输出为 [0-9] (我也不知道具体的原理)?
s = r.Replace(s, "9", 1);//第一个参数是字符串,第二个是正确匹配字符串的时候要替换的字符,第三个参数就是正确匹配正则表达式,然后替换的次数
Console.Write(s);//输出aaa92342525

2.常用的正则表达式方法

2.1静态方法IsMath

1,静态方法IsMatch

IsMath(返回值是一个布尔类型,用于判断指定的字符串是否与正则表达式字符中匹配,它有三个重载方法)

bool IsMatch(string input, string pattern);

参数:

input: 要搜索匹配项的字符串。

pattern:要匹配的正则表达式模式。

返回结果:如果正则表达式找到匹配项,则为true;否则,为false。

bool IsMatch(string inpdt, string pattern, RegexOptions options);

参数:

input: 要搜索匹配项的字符串。

pattern:要匹配的正则表达式模式。

options:枚举值 的一一个按位组合, 这些枚举值提供匹配选项。

返回结果:如果正则表达式找到匹配项,则为true;否则,为false。

bool IsMatch(string input, string pattern, RegexOptions options, TimeSpan matchTimeout);

参数:

input: 要搜索匹配项的字符串。

pattern:要匹配的正则表达式模式。

options:枚举值的一个按位组合,这些枚举值提供匹配选项。

matchTimeout:超时间隔

System.Text.RegularExpressions.Regex.InfiniteMatchTimeout 指示该方法不应超时。

返回结果:如果正则表达式找到匹配项,则为true;否则,为false。

2.1.1 关于参数RegexOptions

它是一个枚举类型,有以下枚举值


RegexOptions枚举值          内联标志         简单说明
ExplicitCapture               n           只有定义了命名或编号的组才捕获
IgnoreCase                    i           不区分大小写
IgnorePatternWhitespace       x           消除模式中的非转义空白并启用由#标记的注释。
MultiLine                     m           多行模式,其原理是修改了^和$的含义
SingleLine                    s            单行模式,和Multiline相对 

2.2静态方法Match

Match的作用:使用指定的匹配选项在输入字符串中搜索指定的正则表达式的第一个匹配项。返回一个包含有关匹配的信息的对象。同样有三个重载方法,参数和IsMatch方法相同。

此外,在Regex类中, 还有一个同名的非静态方法,适用于多个实例的情况下,效率更高- - 些。

下面的关于Match的三个重载方法

  • Match Match(string input, string pattern);
  • Match Match(string input,string pattern, RegexOptions options); input,
  • Match Match(string string pattern, RegexOptions options, TimeSpan matchTimeout);

2.3静态方法Matchs

静态方法Matches,在指定的输入字符串中搜索指定的正则表达式的所有匹配项。跟上面方法不同之处,就是这个方法返回的是所有匹配项,他同样有三个重载方法,并且参数和Match方法完全相同此外,在Regex类中,还有一个同名的非静态方法,适用于多个实例的情况下,效率更高- -些。

2.4 Replaces函数

我们知道正则表达式主要是实现验证,提取,分割,替换字符的功能.Replace函数是实现替换功能的.

1 )Replace(string input,string pattern,string replacement)

//input是源字 符串,pattern是匹配的条件,replacement是替换的内容,就是把符合匹配条件pattern的内容转换成它

比如string result = Regex.Replace("abc", "ab", "#" );
➢//结果是#c,就是把字符串abc中的ab替换成#

2 )Replace(string input,string pattern,string replacement,RegexOptions options)

//RegexOptions是- 一个枚举类型,用来做- -些设定

//前面用注释时 就用到了RegexOptions.IgnorePatternWhitespace.如果在匹配时忽略大小写就可以用

RegexOptions.lgnoreCase
比如string result = Regex.Replace("ABc", "ab", “#" ,RegexOptions.lgnoreCase);

补充:在 Regex 类中使用 IsMatch 方法判断所匹配的字符串是否满足正则表达式的要求

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("请输入一个邮箱");
        string email = Console.ReadLine();
        Regex regex = new Regex(@"^(\w)+(\.\w)*@(\w)+((\.\w+)+)$");
        if (regex.IsMatch(email))
        {
            Console.WriteLine("邮箱格式正确。");
        }
        else
        {
            Console.WriteLine("邮箱格式不正确。");
        }
    }
}

总结

到此这篇关于C#正则表达式(Regex类)用法的文章就介绍到这了,更多相关C#正则表达式用法内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

相关文章