如何在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: aabcabbcPattern: ^(?:(a+b+)c)+$
在此示例中,只有一个组:(a+b+)
。该组在量词内部,并且匹配两次。它生成两个 捕获 :aab
和abb
:
aabcabbc^^^ ^^^
Cap1 Cap2
当一组不在量词内部时,它仅生成一个捕获。在您的情况下,您有3个组,每个组捕获一次。您可以使用match.Groups[1].Value
,match.Groups[2].Value
并match.Groups[3].Value
提取你感兴趣的子串3,而不诉诸
捕捉 所有概念。
以上是 如何在C#中读取RegEx捕获 的全部内容, 来源链接: utcz.com/qa/403345.html