C#正则表达式示例

本文的翻译是专门为“ C#Developer”课程的学生准备的。




Regex类使用C#实现正则表达式。 在本文中,您将学习如何使用C#正则表达式来验证各种用户输入。

C#中的正则表达式实现正则表达式。 C#Regex类提供了用于分析大型文本以搜索字符模式的方法和属性。 在本文中,您将学习如何在C#中使用.NET Regex类。

正则表达式


正则表达式用于检查字符串是否与模式匹配。 正则表达式(正则表达式或regex或regexp)是定义模式的一系列字符。 模式可以由文字,数字,字符,运算符或构造组成。 该模式用于查找字符串或文件中的匹配项。
在检查输入,解析和查找字符串时,经常使用正则表达式。 例如,检查有效的出生日期,社会保险号,全名(姓名和姓氏之间用逗号分隔),查找子字符串的出现次数,替换子字符串,日期格式,有效的电子邮件格式,货币格式等。

正则表达式类


在.NET中,Regex类表示正则表达式引擎。 它可用于快速分析大量文本以查找特定的字符模式,提取,编辑,替换或删除文本子字符串,并将提取的字符串添加到集合中以生成报告。

Regex类在System.Text.RegularExpressions命名空间中定义。 Regex类的构造函数将模板字符串以及其他可选参数作为参数。

以下代码段从一个模式创建一个正则表达式。 在此,图案对应于以字母“ M”开头的单词。

//    ,     "M" string pattern = @"\b[M]\w+"; //   Regex Regex rg = new Regex(pattern); 


以下代码片段包含一个长文本,其中包含需要分析的作者的姓名。

 //   string authors = "Mahesh Chand, Raj Kumar, Mike Gold, Allen O'Neill, Marshal Troll"; 


Matches方法用于在正则表达式中查找所有匹配项,并返回MatchCollection。

 //    MatchCollection matchedAuthors = rg.Matches(authors); 


下一段代码将经过一系列匹配。

 //     for (int count = 0; count < matchedAuthors.Count; count++) Console.WriteLine(matchedAuthors[count].Value); 


这是完整的代码:

 //    ,     "M" string pattern = @"\b[M]\w+"; //   Regex Regex rg = new Regex(pattern); //   string authors = "Mahesh Chand, Raj Kumar, Mike Gold, Allen O'Neill, Marshal Troll"; //    MatchCollection matchedAuthors = rg.Matches(authors); ///     for (int count = 0; count < matchedAuthors.Count; count++) Console.WriteLine(matchedAuthors[count].Value); 


在上面的示例中,代码查找字符“ M”。 但是如果单词以“ m”开头怎么办。 以下代码段使用RegexOptions.IgnoreCase参数,以便Regex不区分大小写。

 //    ,     "M" string pattern = @"\b[m]\w+"; //   Regex Regex rg = new Regex(pattern, RegexOptions.IgnoreCase); 


用正则表达式替换多个空格


Regex.Replace()方法用于将匹配的字符串替换为新的字符串。 下面的示例在一个字符串中搜索一个空格中的多个空格。

 //      string badString = "Here is a strig with ton of white space." ; string CleanedString = Regex.Replace(badString, "\\s+", " "); Console.WriteLine($"Cleaned String: {CleanedString}"); 


以下代码段用'-'替换空格。

 string CleanedString = Regex.Replace(badString, "\\s+", "-"); 


使用正则表达式将字符串拆分为字符


在下面的示例中,正则表达式模式[az] +和Regex.Split()方法用于将字符串拆分为字符,而不Regex.Split()

 //     string azpattern = "[az]+"; string str = "Asd2323b0900c1234Def5678Ghi9012Jklm"; string[] result = Regex.Split(str, azpattern, RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(500)); for (int i = 0; i < result.Length; i++) { Console.Write("'{0}'", result[i]); if (i < result.Length - 1) Console.Write(", "); } 


C#中的正则表达式


正则表达式是用于解析和更改字符串的模式匹配标准,并允许用户表达计算机程序应如何在文本中查找指定的模式,以及当找到与给定模式的每次匹配时该怎么做。 有时它们缩写为“ regex”。 它们是查找和修改采用特定格式的字符串的有效方法。

这是一个简单的C#代码示例,显示了如何使用正则表达式。

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; namespace RegularExpression1 { class Program { static void Main(string[] args) { Regex r = new Regex(@"^\+?\d{0,2}\-?\d{4,5}\-?\d{5,6}"); //  Regex    . string[] str = { "+91-9678967101", "9678967101", "+91-9678-967101", "+91-96789-67101", "+919678967101" }; //         . foreach (string s in str) { Console.WriteLine("{0} {1} a valid mobile number.", s, r.IsMatch(s) ? "is" : "is not"); //  IsMatch    ,   ,     . } } } } 


这是正则表达式及其在C#和.NET中的用法的详细说明:
C#中的正则表达式

正则表达式检查电子邮件


要测试多个电子邮件地址,我们可以使用以下正则表达式。 我们使用定界符';'分隔地址

^((\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)\s*[;]{0,1}\s*)+$

如果要使用定界符',请使用以下命令

^((\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)\s*[,]{0,1}\s*)+$

以及是否要同时使用定界符','和';' 然后用这个

^((\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)\s*[;,.]{0,1}\s*)+$

因此,使用上述正则表达式,您可以一次检查一个或多个地址。

在此处查找更多信息:正则表达式,用于检查多个电子邮件地址

使用正则表达式验证用户输入


本文介绍了如何在C#和.NET中使用正则表达式(System.Text.RegularExpressions命名空间的Regex类)。

我们可以使用Regex.Match方法,该方法接受输入和正则表达式,如果满足则返回成功

 if (!Regex.Match(firstNameTextBox.Text, "^[AZ][a-zA-Z]*$").Success) {} if (!Regex.Match(addressTextBox.Text, @"^[0-9]+\s+([a-zA-Z]+|[a-zA-Z]+\s[a-zA-Z]+)$").Success) if (!Regex.Match(cityTextBox.Text, @"^([a-zA-Z]+|[a-zA-Z]+\s[a-zA-Z]+)$").Success) if (!Regex.Match(stateTextBox.Text, @"^([a-zA-Z]+|[a-zA-Z]+\s[a-zA-Z]+)$").Success) if (!Regex.Match(zipCodeTextBox.Text, @"^\d{5}$").Success) { if (!Regex.Match(phoneTextBox.Text, @"^[1-9]\d{2}-[1-9]\d{2}-\d{4}$").Success) 


在此处了解更多信息:
使用正则表达式验证用户输入


在C#中使用Regex.split(regex)分割字符串


在这一部分中,我们将学习如何在C#中使用RegEx中断字符串。 正则表达式根据模式中断字符串。 它处理指定为模板的定界符。 这就是正则表达式比string.Split更好的原因。 以下是一些有关如何在C#中使用Regex中断字符串的示例。 让我们编写代码。

要使用Regex拆分字符串,请添加以下名称空间。

 using System; using System.Text.RegularExpressions; using System.Collections.Generic; 


范例1:

使用正则表达式将数字和字符串分开。

 string Text = "1 One, 2 Two, 3 Three is good."; string[] digits = Regex.Split(Text, @"\D+"); foreach (string value in digits) { int number; if (int.TryParse(value, out number)) { Console.WriteLine(value); } } 


上面的代码使用\ D +分隔字符串,并通过遍历结果输出数字。

在此处了解更多信息:

在C#中使用正则表达式拆分字符串

用正则表达式替换字符串中的特殊字符


在这一部分中,我将告诉您如何在C#中用正则表达式替换特殊字符。

如果您有一个包含特殊字符的字符串,并且想要删除或替换它们,则可以为此使用正则表达式。

使用以下代码:

 Regex.Replace(your String, @"[^0-9a-zA-Z]+", "") 


此代码将删除所有特殊字符,但是如果您不想删除某些特殊字符,例如,逗号“,”和冒号“:”-进行以下更改:

 Regex.Replace(Your String, @"[^0-9a-zA-Z:,]+", "") 


同样,您可以根据需要进行更改。

注意事项:

应该注意的是,正则表达式并不是每一个小的字符串操作的灵丹妙药。 如果需要String类或其他类提供的简单解析,请尝试并使用它。


进一步阅读



如果您不熟悉正则表达式,建议阅读这篇文章,正则表达式简介

这是另一篇文章:“ 在C#中使用正则表达式

Source: https://habr.com/ru/post/zh-CN469989/


All Articles