如何在C#中读取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#regex API可能会令人困惑。有 小组捕获

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

层次结构是:

  • 比赛

    • 捕获

(一场比赛可以有多个小组,每个小组可以有多个比赛)

例如:

Subject: aabcabbc

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

在此示例中,只有一个组:(a+b+)。该组在量词内部,并且匹配两次。它生成两个 捕获aababb

aabcabbc

^^^ ^^^

Cap1 Cap2

当一组不在量词内部时,它仅生成一个捕获。在您的情况下,您有3个组,每个组捕获一次。您可以使用match.Groups[1].Valuematch.Groups[2].Valuematch.Groups[3].Value提取你感兴趣的子串3,而不诉诸

捕捉 所有概念。

以上是 如何在C#中读取RegEx捕获 的全部内容, 来源链接: utcz.com/qa/403345.html

回到顶部