我开始写一本C#书,我决定把RegEx放到混音中,让枯燥的控制台练习更有趣.我想要做的是在控制台中询问用户他们的电话号码,根据RegEx进行检查,然后捕获数字,这样我就可以按照我想要的方
也可以随意更正任何代码格式或变量命名问题.
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个子串,而不需要依赖捕获概念.