日期:2014-05-17  浏览次数:20818 次

求助!求一个正则表达式
最近公司做的项目涉及到一个短信发送内容。现在有这样一个需求:
收信人的手机号可以在列表中选择,也可以手动输入。列表选择后的收信人的固定格式是:

张三<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);