C# 正则表达式

正则表达式有助于描述文本中的复杂模式。这些 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)

BC# 正则表达式中使用三种类型的括号:“[” 和花括号 “{” 。方括号指定必须匹配的字符,而花括号指定字符的数量。“(” 用于分组。
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();
    }
}
C# Regex Example 1

分析

我们使用了一个名为 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();
    }
}

输出

C# Regular expressions Example 2

分析

正如您在上面的示例代码中所见,字符串变量 pattern 用于存储正则表达式模式。变量 input 用于存储我们提供的文本。

pattern 和 input 都作为参数传递给 Regex.Match 方法,如果匹配成功,该方法将返回匹配值。

分类 C#