当前位置 : 主页 > 编程语言 > c语言 >

如何在C#中读取RegEx捕获

来源:互联网 收集:自由互联 发布时间:2021-06-25
我开始写一本C#书,我决定把RegEx放到混音中,让枯燥的控制台练习更有趣.我想要做的是在控制台中询问用户他们的电话号码,根据RegEx进行检查,然后捕获数字,这样我就可以按照我想要的方
我开始写一本C#书,我决定把RegEx放到混音中,让枯燥的控制台练习更有趣.我想要做的是在控制台中询问用户他们的电话号码,根据RegEx进行检查,然后捕获数字,这样我就可以按照我想要的方式对其进行格式化.除了RegEx捕获部分之外,我已经完成了所有工作.如何将捕获值转换为C#变量?

也可以随意更正任何代码格式或变量命名问题.

static void askPhoneNumber()
{
    String pattern = @"[(]?(\d{3})[)]?[ -.]?(\d{3})[ -.]?(\d{4})";

    System.Console.WriteLine("What is your phone number?");
    String phoneNumber = Console.ReadLine();

    while (!Regex.IsMatch(phoneNumber, pattern))
    {
        Console.WriteLine("Bad Input");
        phoneNumber = Console.ReadLine();
    }

    Match match = Regex.Match(phoneNumber, pattern);
    Capture capture = match.Groups.Captures;

    System.Console.WriteLine(capture[1].Value + "-" + capture[2].Value + "-" + capture[3].Value);
}
C#正则表达式API可能非常令人困惑.有团体和捕获:

>组表示捕获组,它用于从文本中提取子字符串
>如果组出现在量词中,则每组可以有多个捕获.

层次结构是:

>匹配

>集团

>捕获

(一个匹配可以有几个组,每个组可以有几个捕获)

例如:

Subject: aabcabbc
Pattern: ^(?:(a+b+)c)+$

在此示例中,只有一个组:(a b).该组位于量词内,并且匹配两次.它会生成两个捕获:aab和abb:

aabcabbc
^^^ ^^^
Cap1  Cap2

当一个组不在量词内时,它只生成一个捕获.在您的情况下,您有3个组,每组捕获一次.你可以使用match.Groups [1] .Value,match.Groups [2] .Value和match.Groups [3] .Value来提取你感兴趣的3个子串,而不需要依赖捕获概念.

网友评论