正则表达式有助于描述文本中的复杂模式。这些 C# 正则表达式通常简称为 RegEx。我们需要理解的第一件事是,在 Regex 表达式中,一切本质上都是字符。
所描述的 C# Regex 模式可用于搜索、提取、替换和修改文本数据。该编程语言通过在 System.Text.RegularExpressions 命名空间中提供类来支持正则表达式。
C# 正则表达式就是模式。定义模式后,我们可以通过搜索、提取、替换和修改来验证它们。
通常,每个结构化数据都有一些特定的模式。举个例子,
www.tutorialgateway.org
任何 URL 都有一些特定的模式,比如它以 www 开头,以 org 结尾,并且中间用点连接。
contact@tutorialgateway.org
同样,电子邮件地址也有特定的模式,例如
它以一些字母数字字符开头,然后会有一个“@”符号。之后,可能又是一些字母数字字符,后跟一个点,再后面是“com”或“org”等。
2018年7月12日 (月/日/年)
日期格式有某种模式,如 mm-dd-yy 格式或 mm-dd-yyyy 格式。C# 正则表达式帮助我们定义这些模式。正则表达式看起来像下面这样。用于简单电子邮件验证的 Regex 是:
^[a-zA-Z0-9]{1,10}@[a-zA-Z0-9]{1,10}.(com|org|in)$
让我们看看编写正则表达式的基本信息。
B 代表方括号(Brackets),C 代表脱字符(Carrot),D 代表美元符号(Dollar)
| B | C# 正则表达式中使用三种类型的括号:“[” 和花括号 “{” 。方括号指定必须匹配的字符,而花括号指定字符的数量。“(” 用于分组。 |
| C | 脱字符 “^” 是正则表达式的开始 |
| D | 美元符号 “$” 是正则表达式的结束 |
C# Regex 或正则表达式示例
以下示例显示了一些简单的正则表达式模式。
输入存在于 a-g 之间的字符。
[a-g] –
输入一个存在于 a-g 之间且长度为 3 的字符。
Regex: ^[a-g]{3}$ –
输入一个介于 a-g 之间的字符,最大长度为三个字符,最小长度为一个字符。
Regex: ^[a-g]{1,3}$
验证固定为 7 位数字格式的数据,如 8743524、6864351 等。
Regex: ^[0-9]{7}$
我们如何验证最小长度为三、最大长度为六的数字数据?
^[0-9]{3,7}$
如何验证格式如 KTG5240 的发票号码,其中前三个是字母字符,其余是长度为 6 的数字。
^[a-z]{3)[0-9]{6}$
让我们看一个用于验证 URL 的简单 C# Regex。
Regex: ^www.[A-Za-z0-9]{1,10}.(com|org|in)$
在 C# 中编写正则表达式时,始终建议使用逐字字符串字面量(verbatim literal)而不是常规字符串。
逐字字符串字面量以特殊前缀 (@) 开头,这有助于不解释字符串中的反斜杠和元字符。
例如,我们可以写成 @” \n\m”,而不是写 \\m\\n,这使得字符串更具可读性。
C# Regex 字符串匹配
Regex 是 System.Text.RegularExpressions 命名空间中的一个类,它封装了对正则表达式引擎的接口,从而允许我们使用正则表达式执行匹配并从文本中提取数据。
在这种编程语言中,有一个静态方法 Regex.Match 来测试 Regex 是否与字符串匹配。枚举 RegexOptions 是 Regex.Match 方法的一个可选设置。如果存在匹配,Regex.Match 返回一个 Match 对象,该对象包含匹配位置的信息。
Regex 字符串匹配的语法是
Match match = Regex.Match(InputStr, Pattern, RegexOptions)
让我们看一个例子来演示 C# 正则表达式。在这个例子中,我们演示了“august 25”的正则表达式模式。
using System;
using System.Text.RegularExpressions;
class program
{
public static void Main(string[] args)
{
string pattern = @"([a-zA-Z]+) (\d+)";
string input = "special occasion on august 25";
Match match = Regex.Match(input, pattern);
if(match.Success)
{
Console.WriteLine(match.Value);
}
Console.ReadKey();
}
}

分析
我们使用了一个名为 pattern 的字符串变量来存储正则表达式模式。接下来,input 是另一个字符串变量,用于存储我们想要搜索模式匹配的文本。而 match 是一个 Match 类型的变量,用于存储静态方法 regex.Match 返回的结果。如果匹配成功,匹配值将被打印到控制台。
C# RegEx 或正则表达式模式
下表显示了常见的 RegEx 模式及其描述列表。
| abc… | 字母 |
| 123… | 数字 |
| \d | 任何数字 |
| \D | 任何非数字字符 |
| . | 任何字符 |
| \. | 句点 |
| [abc] | 仅 a、b 或 c |
| [^abc] | 不是 a、b 也不是 c |
| [a-z] | 字符 a 到 z |
| [0-9] | 数字 0 到 9 |
| \w | 任何字母数字字符 |
| \W | 任何非字母数字字符 |
| {m} | m 次重复 |
| {m,n} | m 到 n 次重复 |
| * | 零次或多次重复 |
| + | 一次或多次重复 |
| ? | 可选字符 |
| \s | 任何空白字符 |
| \S | 任何非空白字符 |
| ^…$ | 开始和结束 |
| (…) | 捕获组 |
| (a(bc)) | 捕获子组 |
| (.*) | 捕获全部 |
| (abc|def) | 匹配 abc 或 def |
让我们看另一个代码,演示用于验证简单电子邮件地址 contact@tutorialgateway.org 的 C# Regex 正则表达式模式。
using System;
using System.Text.RegularExpressions;
class program
{
public static void Main(string[] args)
{
string pattern = "[A-Za-z0-9]{1,20}@[a-zA-Z]{1,20}.(com|org)$";
string input = "Website is www.tutorialgateway.org, contact us at contact@tutorialgateway.org";
Match match = Regex.Match(input, pattern);
if(match.Success)
{
Console.WriteLine(match.Value);
}
Console.ReadKey();
}
}
输出

分析
正如您在上面的示例代码中所见,字符串变量 pattern 用于存储正则表达式模式。变量 input 用于存储我们提供的文本。
pattern 和 input 都作为参数传递给 Regex.Match 方法,如果匹配成功,该方法将返回匹配值。