求助!求一个正则表达式
最近公司做的项目涉及到一个短信发送内容。现在有这样一个需求:
收信人的手机号可以在列表中选择,也可以手动输入。列表选择后的收信人的固定格式是:
张三<15038200789>;李四<13523135212>;马六<15812312212>;
手动输入的格式是:
15038200789;13523135212;15812312212;
联系人之间统一用英文下的分号隔开,两种方式混合后的格式可能是这种:
15038200789;李四<13523135212>;<15812312212>;
现在需要把这种格式用正则表达式匹配,匹配的结果是分别把手机号匹配出来。该怎么匹配,或者有什么更好的解决方法。
注:联系人可能会有上万条记录,大家也帮忙考虑一下效率。
------解决方案--------------------用Split按照分号分割,然后判断是只有电话的还是有人名的,再提取。
------解决方案--------------------直接用split就行
------解决方案-------------------- string str = "15038200789;李四<13523135212>;<15812312212>;";
var ary = Regex.Matches(str, @"(?<name>[\u4e00-\u9fa5]+)?<?(?<tel>1[3458]\d{9})>?").OfType<Match>().Select(t => new { name = t.Groups["name"].Value, tel = t.Groups["tel"].Value }).ToArray();
------解决方案--------------------假定手机号是11位以上的:
string s = "15038200789;李四<13523135212>;<15812312212>;";
string[] phoneNumbers = Regex.Matches(s, @"\d{11,}").Cast<Match>().Select(x => x.Value).ToArray();
foreach (string phoneNumber in phoneNumbers)
Console.WriteLine(phoneNumber);