【发布时间】:2021-12-15 03:56:17
【问题描述】:
编辑:我解决了以下任务,但我遇到了一些问题。
任务:编写一个程序,从文本中选择正确格式的电话号码,如果匹配正则表达式,则分别列出与正则表达式的整个匹配项、国家代码和电话号码。正确的格式为:+xxx xxx xxx xxx, (xxx) xxx xxx xxx, xxx xxx xxx, xxxxxxxxx, +xxxxxxxxxxxx。我需要这个任务#C .NET 4.7.2。感谢您的帮助。
我有这个代码:
using System.Linq;
using System.Text.RegularExpressions;
public class Program {
private static string MakeRegex(params string[] patterns) {
string SinglePattern(string pattern) => "(?:^" + string.Concat(Regex
.Split(pattern, "(x+)")
.Select(item => item.StartsWith('x')
? $"[0-9]{{{item.Length}}}"
: string.Concat(item.Select(c => Regex.Escape(c.ToString()))))) + "$)";
return string.Join("|", patterns.Select(pattern => SinglePattern(pattern)));
}
public static void Main() {
string Patterns = MakeRegex(
"+xxx xxx xxx xxx",
"(xxx) xxx xxx xxx",
"xxx xxx xxx",
"xxxxxxxxx",
"+xxxxxxxxxxxx"
);
string[] PhoneNumbers = new string[] {
"+420 000 111 222",
"(420) 000 111 222",
"111 000 222",
"000111222",
"+420000111222",
"000111",
"+(420) 000 111 222"
};
string numbers = string.Join(Environment.NewLine, PhoneNumbers
.Select(test => $"{test,20} : {(Regex.IsMatch(test, Patterns) ? "Matched" : "No")}"));
string[] ns = numbers.Split('\n');
foreach (var n in ns)
{
Console.WriteLine(n);
}
}
}
【问题讨论】:
-
你可以在这里查看相同问题的答案stackoverflow.com/questions/18091324/…